Description
In the Linux kernel, the following vulnerability has been resolved: wifi: ar5523: Fix use-after-free on ar5523_cmd() timed out syzkaller reported use-after-free with the stack trace like below [1]: [ 38.960489][ C3] ================================================================== [ 38.963216][ C3] BUG: KASAN: use-after-free in ar5523_cmd_tx_cb+0x220/0x240 [ 38.964950][ C3] Read of size 8 at addr ffff888048e03450 by task swapper/3/0 [ 38.966363][ C3] [ 38.967053][ C3] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 6.0.0-09039-ga6afa4199d3d-dirty #18 [ 38.968464][ C3] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-1.fc36 04/01/2014 [ 38.969959][ C3] Call Trace: [ 38.970841][ C3] <IRQ> [ 38.971663][ C3] dump_stack_lvl+0xfc/0x174 [ 38.972620][ C3] print_report.cold+0x2c3/0x752 [ 38.973626][ C3] ? ar5523_cmd_tx_cb+0x220/0x240 [ 38.974644][ C3] kasan_report+0xb1/0x1d0 [ 38.975720][ C3] ? ar5523_cmd_tx_cb+0x220/0x240 [ 38.976831][ C3] ar5523_cmd_tx_cb+0x220/0x240 [ 38.978412][ C3] __usb_hcd_giveback_urb+0x353/0x5b0 [ 38.979755][ C3] usb_hcd_giveback_urb+0x385/0x430 [ 38.981266][ C3] dummy_timer+0x140c/0x34e0 [ 38.982925][ C3] ? notifier_call_chain+0xb5/0x1e0 [ 38.984761][ C3] ? rcu_read_lock_sched_held+0xb/0x60 [ 38.986242][ C3] ? lock_release+0x51c/0x790 [ 38.987323][ C3] ? _raw_read_unlock_irqrestore+0x37/0x70 [ 38.988483][ C3] ? __wake_up_common_lock+0xde/0x130 [ 38.989621][ C3] ? reacquire_held_locks+0x4a0/0x4a0 [ 38.990777][ C3] ? lock_acquire+0x472/0x550 [ 38.991919][ C3] ? rcu_read_lock_sched_held+0xb/0x60 [ 38.993138][ C3] ? lock_acquire+0x472/0x550 [ 38.994890][ C3] ? dummy_urb_enqueue+0x860/0x860 [ 38.996266][ C3] ? do_raw_spin_unlock+0x16f/0x230 [ 38.997670][ C3] ? dummy_urb_enqueue+0x860/0x860 [ 38.999116][ C3] call_timer_fn+0x1a0/0x6a0 [ 39.000668][ C3] ? add_timer_on+0x4a0/0x4a0 [ 39.002137][ C3] ? reacquire_held_locks+0x4a0/0x4a0 [ 39.003809][ C3] ? __next_timer_interrupt+0x226/0x2a0 [ 39.005509][ C3] __run_timers.part.0+0x69a/0xac0 [ 39.007025][ C3] ? dummy_urb_enqueue+0x860/0x860 [ 39.008716][ C3] ? call_timer_fn+0x6a0/0x6a0 [ 39.010254][ C3] ? cpuacct_percpu_seq_show+0x10/0x10 [ 39.011795][ C3] ? kvm_sched_clock_read+0x14/0x40 [ 39.013277][ C3] ? sched_clock_cpu+0x69/0x2b0 [ 39.014724][ C3] run_timer_softirq+0xb6/0x1d0 [ 39.016196][ C3] __do_softirq+0x1d2/0x9be [ 39.017616][ C3] __irq_exit_rcu+0xeb/0x190 [ 39.019004][ C3] irq_exit_rcu+0x5/0x20 [ 39.020361][ C3] sysvec_apic_timer_interrupt+0x8f/0xb0 [ 39.021965][ C3] </IRQ> [ 39.023237][ C3] <TASK> In ar5523_probe(), ar5523_host_available() calls ar5523_cmd() as below (there are other functions which finally call ar5523_cmd()): ar5523_probe() -> ar5523_host_available() -> ar5523_cmd_read() -> ar5523_cmd() If ar5523_cmd() timed out, then ar5523_host_available() failed and ar5523_probe() freed the device structure. So, ar5523_cmd_tx_cb() might touch the freed structure. This patch fixes this issue by canceling in-flight tx cmd if submitted urb timed out.
Product status
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before c9ba3fbf6a488da6cad1d304c5234bd8d729eba3
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 340524ae7b53a72cf5d9e7bd7790433422b3b12f
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 6447beefd21326a3f4719ec2ea511df797f6c820
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 7360b323e0343ea099091d4ae09576dbe1f09516
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 8af52492717e3538eba3f81d012b1476af8a89a6
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 3eca9697c2f3905dea3ad2fc536ebaa1fbd735bd
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 601ae89375033ac4870c086e24ba03f235d38e55
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before 9aef34e1ae35a87e5f6a22278c17823b7ce64c88
b7d572e1871df06a96a1c9591c71c5494ff6b624 (git) before b6702a942a069c2a975478d719e98d83cdae1797
3.8
Any version before 3.8
4.9.337 (semver)
4.14.303 (semver)
4.19.270 (semver)
5.4.229 (semver)
5.10.163 (semver)
5.15.86 (semver)
6.0.16 (semver)
6.1.2 (semver)
6.2 (original_commit_for_fix)
References
git.kernel.org/...c/c9ba3fbf6a488da6cad1d304c5234bd8d729eba3
git.kernel.org/...c/340524ae7b53a72cf5d9e7bd7790433422b3b12f
git.kernel.org/...c/6447beefd21326a3f4719ec2ea511df797f6c820
git.kernel.org/...c/7360b323e0343ea099091d4ae09576dbe1f09516
git.kernel.org/...c/8af52492717e3538eba3f81d012b1476af8a89a6
git.kernel.org/...c/3eca9697c2f3905dea3ad2fc536ebaa1fbd735bd
git.kernel.org/...c/601ae89375033ac4870c086e24ba03f235d38e55
git.kernel.org/...c/9aef34e1ae35a87e5f6a22278c17823b7ce64c88
git.kernel.org/...c/b6702a942a069c2a975478d719e98d83cdae1797