On Tue, 2022-12-20 at 13:45 -0500, Steven Rostedt wrote:
[ Linus,
I ran the script against your latest master branch: commit b6bb9676f2165d518b35ba3bea5f1fcfc0d969bf As the timer_shutdown*() code is now in your tree, I figured we can start doing the conversions. At least add the trivial ones now as Thomas suggested that this gets applied at the end of the merge window, to avoid conflicts with linux-next during the development cycle. I can wait to Friday to run it again, and resubmit. What is the best way to handle this?
]
From: "Steven Rostedt (Google)" rostedt@goodmis.org
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
For the networking bits:
drivers/net/ethernet/intel/i40e/i40e_main.c | 6 +++--- drivers/net/ethernet/marvell/sky2.c | 2 +- drivers/net/ethernet/sun/sunvnet.c | 2 +- drivers/net/usb/sierra_net.c | 2 +- net/802/garp.c | 2 +- net/802/mrp.c | 4 ++-- net/bridge/br_multicast.c | 8 ++++---- net/bridge/br_multicast_eht.c | 4 ++-- net/core/gen_estimator.c | 2 +- net/ipv4/ipmr.c | 2 +- net/ipv6/ip6mr.c | 2 +- net/mac80211/mesh_pathtbl.c | 2 +- net/netfilter/ipset/ip_set_list_set.c | 2 +- net/netfilter/ipvs/ip_vs_lblc.c | 2 +- net/netfilter/ipvs/ip_vs_lblcr.c | 2 +- net/netfilter/xt_IDLETIMER.c | 4 ++-- net/netfilter/xt_LED.c | 2 +- net/sched/cls_flow.c | 2 +- net/sunrpc/svc.c | 2 +- net/tipc/discover.c | 2 +- net/tipc/monitor.c | 2 +-
Acked-by: Paolo Abeni pabeni@redhat.com