Skip to contentSkip to conversation

blk-throttle: fix UAF by deleteing timer in blk_throtl_exit()

PATCH New Sasha Levin 1 participant 1 message Sep 17, 2021

Subsystems (3)
lore
Share & tools
lore

Sasha Levin

author maintainer
#0 lore raw

PATCH 1/1 blk-throttle: fix UAF by deleteing timer in blk_throtl_exit()

From: Li Jinlin <[email protected]>

[ Upstream commit 884f0e84f1e3195b801319c8ec3d5774e9bf2710 ]

The pending timer has been set up in blk_throtl_init(). However, the timer is not deleted in blk_throtl_exit(). This means that the timer handler may still be running after freeing the timer, which would result in a use-after-free.

Fix by calling del_timer_sync() to delete the timer in blk_throtl_exit().

---
 block/blk-throttle.c | 1 +
 1 file changed, 1 insertion(+)
block/blk-throttle.c +1 -0
index 3a4c9a3c1427..6435dc25be0a 100644
@@ -1584,6 +1584,7 @@ int blk_throtl_init(struct request_queue *q)
 void blk_throtl_exit(struct request_queue *q)
 {
 	BUG_ON(!q->td);
+	del_timer_sync(&q->td->service_queue.pending_timer);
 	throtl_shutdown_wq(q);
 	blkcg_deactivate_policy(q, &blkcg_policy_throtl);
 	kfree(q->td);
Signature · 1 line
2.30.2