Description
In the Linux kernel, the following vulnerability has been resolved: net: usb: kaweth: remove TX queue manipulation in kaweth_set_rx_mode kaweth_set_rx_mode(), the ndo_set_rx_mode callback, calls netif_stop_queue() and netif_wake_queue(). These are TX queue flow control functions unrelated to RX multicast configuration. The premature netif_wake_queue() can re-enable TX while tx_urb is still in-flight, leading to a double usb_submit_urb() on the same URB: kaweth_start_xmit() { netif_stop_queue(); usb_submit_urb(kaweth->tx_urb); } kaweth_set_rx_mode() { netif_stop_queue(); netif_wake_queue(); // wakes TX queue before URB is done } kaweth_start_xmit() { netif_stop_queue(); usb_submit_urb(kaweth->tx_urb); // URB submitted while active } This triggers the WARN in usb_submit_urb(): "URB submitted while active" This is a similar class of bug fixed in rtl8150 by - commit 958baf5eaee3 ("net: usb: Remove disruptive netif_wake_queue in rtl8150_set_multicast"). Also kaweth_set_rx_mode() is already functionally broken, the real set_rx_mode action is performed by kaweth_async_set_rx_mode(), which in turn is not a no-op only at ndo_open() time.
Product status
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 443a830b1dc4f85c7560da59d4494b629feee215
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 586318c2730433184c6f1d21183e346ddf25e81d
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before a2cd4b4db315a845a5603d08c9d03b11ddfc799d
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before ef9b10a020503888eb6c8ed85a3d901a624ede4c
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 9c79b839a63980c7da7ec5db895198045e154112
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before fc393af769af845d9985e2845e49553d8f015a64
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 8367c0e90126426e60581e4c07e1ec4411a0f843
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 64868f5ecadeb359a49bc4485bfa7c497047f13a
2.6.12
Any version before 2.6.12
5.10.252 (semver)
5.15.202 (semver)
6.1.165 (semver)
6.6.128 (semver)
6.12.75 (semver)
6.18.16 (semver)
6.19.6 (semver)
7.0 (original_commit_for_fix)
References
git.kernel.org/...c/443a830b1dc4f85c7560da59d4494b629feee215
git.kernel.org/...c/586318c2730433184c6f1d21183e346ddf25e81d
git.kernel.org/...c/a2cd4b4db315a845a5603d08c9d03b11ddfc799d
git.kernel.org/...c/ef9b10a020503888eb6c8ed85a3d901a624ede4c
git.kernel.org/...c/9c79b839a63980c7da7ec5db895198045e154112
git.kernel.org/...c/fc393af769af845d9985e2845e49553d8f015a64
git.kernel.org/...c/8367c0e90126426e60581e4c07e1ec4411a0f843
git.kernel.org/...c/64868f5ecadeb359a49bc4485bfa7c497047f13a