{"id":"CVE-2026-74684","state":"PUBLISHED","title":"net: tap: set skb->dev before parsing virtio net header in tap_get_user_xdp()","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: tap: set skb->dev before parsing virtio net header in tap_get_user_xdp()\n\nThe commit 4f61f133f354 (\"net: tap: NULL pointer derefence in\ndev_parse_header_protocol when skb->dev is null\") fixed a crash in\ntap_get_user() by assigning skb->dev before calling tun_vnet_hdr_to_skb().\nThis is required because virtio_net_hdr_to_skb() may invoke\ndev_parse_header_protocol(), which dereferences skb->dev. Without the\nassignment, a NULL pointer dereference can occur.\n\nHowever, tap_get_user_xdp() still parses the virtio-net header before\nassigning skb->dev. When the vhost TX path passes an XDP buffer containing\na GSO virtio-net header but the protocol is set to zero on purpose,\ntun_vnet_hdr_to_skb() can reach dev_parse_header_protocol() while skb->dev\nis still NULL, resulting in a crash.\n\nFix this by looking up the tap device and assigning skb->dev before calling\ntun_vnet_hdr_to_skb(), matching the ordering already used in\ntap_get_user(). Preserve the existing RCU read-side critical section across\ndev_queue_xmit().","publishedAt":"2026-08-22T15:32:50.846Z","updatedAt":"2026-10-30T12:30:16.355Z","severity":{"score":7.1,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"1d022885f3e6e0e238815391a4afaf3a4fb0a442","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"61dd022c55c7307ec119e5672cb141cccbecf3b1","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"15583b07fd691a844fbf7b3ad612cdc9e9a657c0","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"8b444b126cd8e4473e652f529753ed4dd1360a9c","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"164c31ee252ebd1ac8f44c2dfc5486b6d9a0379b","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"3874892dd27d5387aa9a06f58d9060f18f351d24","versionType":"git"},{"version":"ea3fb2ce5fa794d02135f5c079e05cd6fc3f545d","status":"affected","versionType":"git"},{"version":"54ef8243c3c8e90f1ea5792e6752e021a25c8eb3","status":"affected","versionType":"git"},{"version":"ca278267d6cd9544645731732455b6b20cb0e895","status":"affected","versionType":"git"},{"version":"faa3baa2828c5e1c4374f3e60041f75c64f5fcb6","status":"affected","versionType":"git"},{"version":"99b1d3f74b9ef72c2f74c8e4c078e1bc0706e748","status":"affected","versionType":"git"},{"version":"4.14.226","status":"affected","lessThan":"4.15","versionType":"semver"},{"version":"4.19.181","status":"affected","lessThan":"4.20","versionType":"semver"},{"version":"5.4.106","status":"affected","lessThan":"5.5","versionType":"semver"},{"version":"5.10.24","status":"affected","lessThan":"5.11","versionType":"semver"},{"version":"5.11.7","status":"affected","lessThan":"5.12","versionType":"semver"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/tap.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.12","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.12","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.105","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.45","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.9","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/tap.c"]}],"references":["https://git.kernel.org/stable/c/1d022885f3e6e0e238815391a4afaf3a4fb0a442","https://git.kernel.org/stable/c/61dd022c55c7307ec119e5672cb141cccbecf3b1","https://git.kernel.org/stable/c/15583b07fd691a844fbf7b3ad612cdc9e9a657c0","https://git.kernel.org/stable/c/8b444b126cd8e4473e652f529753ed4dd1360a9c","https://git.kernel.org/stable/c/164c31ee252ebd1ac8f44c2dfc5486b6d9a0379b","https://git.kernel.org/stable/c/3874892dd27d5387aa9a06f58d9060f18f351d24"],"weaknesses":[],"ingestedAt":"2026-10-30T12:48:04.825Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/74xxx/CVE-2026-74684.json","commit":"1f312381e38164a43607eebab851b151dd16861e","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-74684","state":"PUBLISHED","datePublished":"2026-08-22T15:32:50.846Z","dateUpdated":"2026-10-30T12:30:16.355Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-08-15T05:44:03.926Z"},"containers":{"cna":{"title":"net: tap: set skb->dev before parsing virtio net header in tap_get_user_xdp()","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: tap: set skb->dev before parsing virtio net header in tap_get_user_xdp()\n\nThe commit 4f61f133f354 (\"net: tap: NULL pointer derefence in\ndev_parse_header_protocol when skb->dev is null\") fixed a crash in\ntap_get_user() by assigning skb->dev before calling tun_vnet_hdr_to_skb().\nThis is required because virtio_net_hdr_to_skb() may invoke\ndev_parse_header_protocol(), which dereferences skb->dev. Without the\nassignment, a NULL pointer dereference can occur.\n\nHowever, tap_get_user_xdp() still parses the virtio-net header before\nassigning skb->dev. When the vhost TX path passes an XDP buffer containing\na GSO virtio-net header but the protocol is set to zero on purpose,\ntun_vnet_hdr_to_skb() can reach dev_parse_header_protocol() while skb->dev\nis still NULL, resulting in a crash.\n\nFix this by looking up the tap device and assigning skb->dev before calling\ntun_vnet_hdr_to_skb(), matching the ordering already used in\ntap_get_user(). Preserve the existing RCU read-side critical section across\ndev_queue_xmit()."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"1d022885f3e6e0e238815391a4afaf3a4fb0a442","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"61dd022c55c7307ec119e5672cb141cccbecf3b1","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"15583b07fd691a844fbf7b3ad612cdc9e9a657c0","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"8b444b126cd8e4473e652f529753ed4dd1360a9c","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"164c31ee252ebd1ac8f44c2dfc5486b6d9a0379b","versionType":"git"},{"version":"924a9bc362a5223cd448ca08c3dde21235adc310","status":"affected","lessThan":"3874892dd27d5387aa9a06f58d9060f18f351d24","versionType":"git"},{"version":"ea3fb2ce5fa794d02135f5c079e05cd6fc3f545d","status":"affected","versionType":"git"},{"version":"54ef8243c3c8e90f1ea5792e6752e021a25c8eb3","status":"affected","versionType":"git"},{"version":"ca278267d6cd9544645731732455b6b20cb0e895","status":"affected","versionType":"git"},{"version":"faa3baa2828c5e1c4374f3e60041f75c64f5fcb6","status":"affected","versionType":"git"},{"version":"99b1d3f74b9ef72c2f74c8e4c078e1bc0706e748","status":"affected","versionType":"git"},{"version":"4.14.226","status":"affected","lessThan":"4.15","versionType":"semver"},{"version":"4.19.181","status":"affected","lessThan":"4.20","versionType":"semver"},{"version":"5.4.106","status":"affected","lessThan":"5.5","versionType":"semver"},{"version":"5.10.24","status":"affected","lessThan":"5.11","versionType":"semver"},{"version":"5.11.7","status":"affected","lessThan":"5.12","versionType":"semver"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/tap.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.12","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.12","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.105","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.45","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.9","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/tap.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/1d022885f3e6e0e238815391a4afaf3a4fb0a442"},{"url":"https://git.kernel.org/stable/c/61dd022c55c7307ec119e5672cb141cccbecf3b1"},{"url":"https://git.kernel.org/stable/c/15583b07fd691a844fbf7b3ad612cdc9e9a657c0"},{"url":"https://git.kernel.org/stable/c/8b444b126cd8e4473e652f529753ed4dd1360a9c"},{"url":"https://git.kernel.org/stable/c/164c31ee252ebd1ac8f44c2dfc5486b6d9a0379b"},{"url":"https://git.kernel.org/stable/c/3874892dd27d5387aa9a06f58d9060f18f351d24"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:H","baseScore":7.1,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - A malicious KVM guest reaches tap_get_user_xdp() by kicking the virtio-net TX virtqueue; vhost_net handle_tx_copy batches XDP buffers and invokes tap_sendmsg(TUN_MSG_PTR), not via any host network packet-receive path.\nAC:L - On typical QEMU/KVM vhost-net+tap/macvtap backends with TX batching enabled, a guest fully controls virtio-net GSO headers and Ethernet frames; sending GSO with ethertype 0 deterministically hits dev_parse_header_protocol() with skb->dev NULL without races.\nPR:N - No host root or capabilities are required; a malicious cloud VM tenant only needs code execution inside a guest using virtio-net with a vhost-net tap backend, matching other guest-to-host virtio/KVM CNA scores.\nUI:N - No separate victim action is needed; the attacker submits crafted virtio-net TX descriptors from their own guest workload during normal VM operation without requiring host administrator interaction.\nS:C - Guest-supplied virtio-net TX data triggers a NULL pointer dereference in host tap_get_user_xdp(), panicking the physical host kernel and crossing the KVM guest-to-host virtualization security boundary.\nC:N - The failure mode is a NULL pointer dereference at dev->header_ops with skb->dev unset; there is no demonstrated out-of-bounds read, use-after-free, or other memory corruption that could disclose host kernel data.\nI:N - No guest-controlled host memory write or control-flow hijack occurs; the host kernel oopses on the NULL dereference before any exploitable modification beyond the immediate crash.\nA:H - The NULL pointer dereference in dev_parse_header_protocol() provokes a host kernel oops/panic in the vhost worker during guest virtio-net TX, denying availability of the hypervisor and all co-resident VMs."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-30T12:30:16.355Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.12","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.12","versionEndExcluding":"6.6.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.12","versionEndExcluding":"6.12.105"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.12","versionEndExcluding":"6.18.45"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.12","versionEndExcluding":"7.1.9"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.12","versionEndExcluding":"7.2"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.14.226"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.19.181"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.4.106"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10.24"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.11.7"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-74684","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2026-10-16T19:14:29.752202Z"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-16T19:16:09.048Z"}}]}}}