CVE-2022-50740

Summary

In the Linux kernel, the following vulnerability has been resolved:

wifi: ath9k: hif_usb: fix memory leak of urbs in ath9k_hif_usb_dealloc_tx_urbs()

Syzkaller reports a long-known leak of urbs in ath9k_hif_usb_dealloc_tx_urbs().

The cause of the leak is that usb_get_urb() is called but usb_free_urb() (or usb_put_urb()) is not called inside usb_kill_urb() as urb->dev or urb->ep fields have not been initialized and usb_kill_urb() returns immediately.

The patch removes trying to kill urbs located in hif_dev->tx.tx_buf because hif_dev->tx.tx_buf is not supposed to contain urbs which are in pending state (the pending urbs are stored in hif_dev->tx.tx_pending). The tx.tx_lock is acquired so there should not be any changes in the list.

Found by Linux Verification Center (linuxtesting.org) with Syzkaller.

Affected Software

VendorProductVersion RangeStatus
LinuxLinux6f0706ef39fecc6bf56d67728fe0c94e26b43e9d < 134ae5eba41294eff76e4be20d6001b8f0192207affected
LinuxLinux795d57a558d106b8a5bc2bd7aeaf707d9a099244 < 472312fef2b9eccaa03bd59e0ab2527da945e736affected
LinuxLinuxdf4318440c1568b7dedc5f7d4e617d0e297a1313 < eddbb8f7620f9f8008b090a6e10c460074ca575aaffected
LinuxLinuxa9990ed2d7ca9339d37c7f67d6f5cb298c3f1b34 < 9850791d389b342ae6e573fe8198db0b4d338352affected
LinuxLinux03fb92a432ea5abe5909bca1455b7e44a9380480 < c3fb3e9a2c0c1a0fa492d90eb19bcfa92a5f884daffected
LinuxLinux03fb92a432ea5abe5909bca1455b7e44a9380480 < d856f7574bcc1d81de565a857caf32f122cd7ce0affected
LinuxLinux03fb92a432ea5abe5909bca1455b7e44a9380480 < c05189a429fdb371dd455c3c466d67ac2ebff152affected
LinuxLinux03fb92a432ea5abe5909bca1455b7e44a9380480 < 08aa0537ec8cf29ceccae98acc1a534fc12598c1affected
LinuxLinux03fb92a432ea5abe5909bca1455b7e44a9380480 < c2a94de38c74e86f49124ac14f093d6a5c377a90affected
LinuxLinuxb92e116ae36f498858dbb18e29a066c3f5348965affected
LinuxLinux7f5972267295fe49f8da8eb42bc2eb3d140860c0affected
LinuxLinux2d72d5ce63c92f56b9f978e8befb5838144176b9affected
LinuxLinux4.9.241 < 4.9.337affected
LinuxLinux4.14.203 < 4.14.303affected
LinuxLinux4.19.154 < 4.19.270affected
LinuxLinux5.4.73 < 5.4.229affected
LinuxLinux4.4.241 < 4.5affected
LinuxLinux5.8.17 < 5.9affected
LinuxLinux5.9.2 < 5.10affected
LinuxLinux5.10affected
LinuxLinux0 < 5.10unaffected
LinuxLinux4.9.337 <= 4.9.*unaffected
LinuxLinux4.14.303 <= 4.14.*unaffected
LinuxLinux4.19.270 <= 4.19.*unaffected
LinuxLinux5.4.229 <= 5.4.*unaffected
LinuxLinux5.10.163 <= 5.10.*unaffected
LinuxLinux5.15.86 <= 5.15.*unaffected
LinuxLinux6.0.16 <= 6.0.*unaffected
LinuxLinux6.1.2 <= 6.1.*unaffected
LinuxLinux6.2 <= *unaffected

Weaknesses

References