Commit a46bfa0
amt: fix use-after-free in AMT delayed works
commit ea20c44 upstream.
When an AMT device is removed, pending delayed works can still access
the freed amt_dev structure, which may result in kernel crashes or
memory corruption.
amt_dev_stop() cancels req_wq and discovery_wq with
cancel_delayed_work_sync(), but these works can be scheduled again
from event_wq after the cancellation. This allows delayed works to
access the freed amt_dev structure after the netdev has been released.
The following is a simple race scenario:
CPU0 CPU1
amt_dev_stop()
cancel_delayed_work_sync()
amt_event_work()
mod_delayed_work(req_wq)
free netdev
req_wq accesses freed amt_dev
Use disable_delayed_work_sync() in amt_dev_stop() to prevent req_wq and
discovery_wq from being queued again and wait for running work items
to complete.
The delayed works are disabled after initialization in
amt_newlink() and enabled only when the device is successfully opened.
This keeps the delayed work lifecycle synchronized with the lifetime
of the AMT device.
Fixes: cbc21dc ("amt: add data plane of amt interface")
Cc: stable@vger.kernel.org
Signed-off-by: Shihuang Liu <shlomojune6@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Taehee Yoo <ap420073@gmail.com>
Link: https://patch.msgid.link/20260722113919.7723-1-shlomojune6@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>1 parent d3dc888 commit a46bfa0
1 file changed
Lines changed: 11 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3029 | 3029 | | |
3030 | 3030 | | |
3031 | 3031 | | |
| 3032 | + | |
| 3033 | + | |
| 3034 | + | |
3032 | 3035 | | |
3033 | | - | |
| 3036 | + | |
| 3037 | + | |
| 3038 | + | |
3034 | 3039 | | |
| 3040 | + | |
3035 | 3041 | | |
3036 | 3042 | | |
3037 | 3043 | | |
| |||
3057 | 3063 | | |
3058 | 3064 | | |
3059 | 3065 | | |
3060 | | - | |
3061 | | - | |
| 3066 | + | |
| 3067 | + | |
3062 | 3068 | | |
3063 | 3069 | | |
3064 | 3070 | | |
| |||
3313 | 3319 | | |
3314 | 3320 | | |
3315 | 3321 | | |
| 3322 | + | |
| 3323 | + | |
3316 | 3324 | | |
3317 | 3325 | | |
3318 | 3326 | | |
| |||
0 commit comments