{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-40140","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-04-16T07:20:57.171Z","datePublished":"2025-11-12T10:23:24.586Z","dateUpdated":"2026-08-05T12:08:02.642Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T12:08:02.642Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: usb: Remove disruptive netif_wake_queue in rtl8150_set_multicast\n\nsyzbot reported WARNING in rtl8150_start_xmit/usb_submit_urb.\nThis is the sequence of events that leads to the warning:\n\nrtl8150_start_xmit() {\n\tnetif_stop_queue();\n\tusb_submit_urb(dev->tx_urb);\n}\n\nrtl8150_set_multicast() {\n\tnetif_stop_queue();\n\tnetif_wake_queue();\t\t<-- wakes up TX queue before URB is done\n}\n\nrtl8150_start_xmit() {\n\tnetif_stop_queue();\n\tusb_submit_urb(dev->tx_urb);\t<-- double submission\n}\n\nrtl8150_set_multicast being the ndo_set_rx_mode callback should not be\ncalling netif_stop_queue and notif_start_queue as these handle\nTX queue synchronization.\n\nThe net core function dev_set_rx_mode handles the synchronization\nfor rtl8150_set_multicast making it safe to remove these locks."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:A - The buggy `ndo_set_rx_mode` callback is reachable from an unauthenticated attacker on the same L2 segment: flooding IPv6 Router Advertisements with fresh prefixes drives SLAAC address creation → `addrconf_join_solict()` → `ipv6_dev_mc_inc` → `igmp6_group_added` → `dev_mc_add` → `__dev_set_rx_mode` → `rtl8150_set_multicast`, while the same attacker keeps a TX URB in flight by eliciting ICMP/ARP/RST replies. RAs are link-local and non-routable, so Adjacent rather than Network; the vector is the network stack, not the USB bus.\nAC:L - The attacker controls both sides of the race — they generate the TX load that guarantees an in-flight URB and drive rx_mode changes at an arbitrary rate — and the attempt is freely repeatable. The window between `urb->hcpriv = NULL` and `urb->complete()` in `__usb_hcd_giveback_urb()` is widened further by bulk giveback being deferred to a BH workqueue.\nPR:N - IPv6 Router Advertisement processing is unauthenticated by design and `accept_ra=1` is the default on non-forwarding hosts, so no credentials of any kind are needed on the adjacent path. Even the purely local path requires only an unprivileged `setsockopt(IP_ADD_MEMBERSHIP)` loop with no capabilities.\nUI:N - The kernel processes Router Advertisements and performs the resulting solicited-node multicast joins automatically in softirq on packet receive. No victim action is required at any point.\nS:U - The corruption is confined to kernel memory of the affected host, within the same security authority. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - The use-after-free leaves the HCD DMA-ing from a freed sk_buff data buffer and transmitting its contents onto the attacker's network segment, directly leaking reallocated kernel heap memory. Per guidance, a UAF also generically warrants C:H because it gives the attacker control over freed-object contents.\nI:H - The double free of an sk_buff corrupts the `skbuff_head_cache` slab freelist, a well-known heap-shaping and arbitrary-write primitive, and the still-queued URB writes/reads memory that can be reallocated to other kernel users mid-transfer.\nA:H - The reported `WARN_ONCE(\"URB submitted while active\")` is a kernel oops and a full panic under `panic_on_warn=1`, which is set in many hardened and production configurations. The UAF and double free crash the kernel outright, and the TX path is additionally left leaking sk_buffs."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/usb/rtl8150.c"],"versions":[{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"cce3c0e21cdd15bcba5c35d3af1700186de8f187","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"1a08a37ac03d07a1608a1592791041cac979fbc3","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"54f8ef1a970a8376e5846ed90854decf7c00555d","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"114e05344763a102a8844efd96ec06ba99293ccd","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"6394bade9daab8e318c165fe43bba012bf13cd8e","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"6053e47bbf212b93c051beb4261d7d5a409d0ce3","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"9d72df7f5eac946f853bf49c428c4e87a17d91da","status":"affected","versionType":"git"},{"version":"1da177e4c3f41524e886b7f1b8a0c1fc7321cac2","lessThan":"958baf5eaee394e5fd976979b0791a875f14a179","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/usb/rtl8150.c"],"versions":[{"version":"2.6.12","status":"affected"},{"version":"0","lessThan":"2.6.12","status":"unaffected","versionType":"semver"},{"version":"5.4.301","lessThanOrEqual":"5.4.*","status":"unaffected","versionType":"semver"},{"version":"5.10.246","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.195","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.156","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.112","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.53","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.17.3","lessThanOrEqual":"6.17.*","status":"unaffected","versionType":"semver"},{"version":"6.18","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"5.4.301"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"5.10.246"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"5.15.195"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"6.1.156"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"6.6.112"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"6.12.53"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"6.17.3"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.12","versionEndExcluding":"6.18"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/cce3c0e21cdd15bcba5c35d3af1700186de8f187"},{"url":"https://git.kernel.org/stable/c/1a08a37ac03d07a1608a1592791041cac979fbc3"},{"url":"https://git.kernel.org/stable/c/54f8ef1a970a8376e5846ed90854decf7c00555d"},{"url":"https://git.kernel.org/stable/c/114e05344763a102a8844efd96ec06ba99293ccd"},{"url":"https://git.kernel.org/stable/c/6394bade9daab8e318c165fe43bba012bf13cd8e"},{"url":"https://git.kernel.org/stable/c/6053e47bbf212b93c051beb4261d7d5a409d0ce3"},{"url":"https://git.kernel.org/stable/c/9d72df7f5eac946f853bf49c428c4e87a17d91da"},{"url":"https://git.kernel.org/stable/c/958baf5eaee394e5fd976979b0791a875f14a179"}],"title":"net: usb: Remove disruptive netif_wake_queue in rtl8150_set_multicast","x_generator":{"engine":"bippy-1.2.0"}}}}