Skip to content

Commit e50b9b9

Browse files
stonezdmPaolo Abeni
authored andcommitted
cxgb4: fix use after free bugs caused by circular dependency problem
The flower_stats_timer can schedule flower_stats_work and flower_stats_work can also arm the flower_stats_timer. The process is shown below: ----------- timer schedules work ------------ ch_flower_stats_cb() //timer handler schedule_work(&adap->flower_stats_work); ----------- work arms timer ------------ ch_flower_stats_handler() //workqueue callback function mod_timer(&adap->flower_stats_timer, ...); When the cxgb4 device is detaching, the timer and workqueue could still be rearmed. The process is shown below: (cleanup routine) | (timer and workqueue routine) remove_one() | free_some_resources() | ch_flower_stats_cb() //timer cxgb4_cleanup_tc_flower() | schedule_work() del_timer_sync() | | ch_flower_stats_handler() //workqueue | mod_timer() cancel_work_sync() | kfree(adapter) //FREE | ch_flower_stats_cb() //timer | adap->flower_stats_work //USE This patch changes del_timer_sync() to timer_shutdown_sync(), which could prevent rearming of the timer from the workqueue. Fixes: e0f911c ("cxgb4: fetch stats for offloaded tc flower flows") Signed-off-by: Duoming Zhou <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 1a2bd3b commit e50b9b9

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1135,7 +1135,7 @@ void cxgb4_cleanup_tc_flower(struct adapter *adap)
11351135
return;
11361136

11371137
if (adap->flower_stats_timer.function)
1138-
del_timer_sync(&adap->flower_stats_timer);
1138+
timer_shutdown_sync(&adap->flower_stats_timer);
11391139
cancel_work_sync(&adap->flower_stats_work);
11401140
rhashtable_destroy(&adap->flower_tbl);
11411141
adap->tc_flower_initialized = false;

0 commit comments

Comments
 (0)