292a089d78
Due to several bugs caused by timers being re-armed after they are shutdown and just before they are freed, a new state of timers was added called "shutdown". After a timer is set to this state, then it can no longer be re-armed. The following script was run to find all the trivial locations where del_timer() or del_timer_sync() is called in the same function that the object holding the timer is freed. It also ignores any locations where the timer->function is modified between the del_timer*() and the free(), as that is not considered a "trivial" case. This was created by using a coccinelle script and the following commands: $ cat timer.cocci @@ expression ptr, slab; identifier timer, rfield; @@ ( - del_timer(&ptr->timer); + timer_shutdown(&ptr->timer); | - del_timer_sync(&ptr->timer); + timer_shutdown_sync(&ptr->timer); ) ... when strict when != ptr->timer ( kfree_rcu(ptr, rfield); | kmem_cache_free(slab, ptr); | kfree(ptr); ) $ spatch timer.cocci . > /tmp/t.patch $ patch -p1 < /tmp/t.patch Link: https://lore.kernel.org/lkml/20221123201306.823305113@linutronix.de/ Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Acked-by: Pavel Machek <pavel@ucw.cz> [ LED ] Acked-by: Kalle Valo <kvalo@kernel.org> [ wireless ] Acked-by: Paolo Abeni <pabeni@redhat.com> [ networking ] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
Makefile-keyspan_pda_fw | ||
aircable.c | ||
ark3116.c | ||
belkin_sa.c | ||
belkin_sa.h | ||
bus.c | ||
ch341.c | ||
console.c | ||
cp210x.c | ||
cyberjack.c | ||
cypress_m8.c | ||
cypress_m8.h | ||
digi_acceleport.c | ||
empeg.c | ||
ezusb_convert.pl | ||
f81232.c | ||
f81534.c | ||
ftdi_sio.c | ||
ftdi_sio.h | ||
ftdi_sio_ids.h | ||
garmin_gps.c | ||
generic.c | ||
io_16654.h | ||
io_edgeport.c | ||
io_edgeport.h | ||
io_ionsp.h | ||
io_ti.c | ||
io_ti.h | ||
io_usbvend.h | ||
ipaq.c | ||
ipw.c | ||
ir-usb.c | ||
iuu_phoenix.c | ||
iuu_phoenix.h | ||
keyspan.c | ||
keyspan_pda.c | ||
keyspan_usa26msg.h | ||
keyspan_usa28msg.h | ||
keyspan_usa49msg.h | ||
keyspan_usa67msg.h | ||
keyspan_usa90msg.h | ||
kl5kusb105.c | ||
kl5kusb105.h | ||
kobil_sct.c | ||
kobil_sct.h | ||
mct_u232.c | ||
mct_u232.h | ||
metro-usb.c | ||
mos7720.c | ||
mos7840.c | ||
mxuport.c | ||
navman.c | ||
omninet.c | ||
opticon.c | ||
option.c | ||
oti6858.c | ||
oti6858.h | ||
pl2303.c | ||
pl2303.h | ||
qcaux.c | ||
qcserial.c | ||
quatech2.c | ||
safe_serial.c | ||
sierra.c | ||
spcp8x5.c | ||
ssu100.c | ||
symbolserial.c | ||
ti_usb_3410_5052.c | ||
upd78f0730.c | ||
usb-serial-simple.c | ||
usb-serial.c | ||
usb-wwan.h | ||
usb_debug.c | ||
usb_wwan.c | ||
visor.c | ||
visor.h | ||
whiteheat.c | ||
whiteheat.h | ||
wishbone-serial.c | ||
xr_serial.c | ||
xsens_mt.c |