Skip to content

Commit 8bf935c

Browse files
stonezdmkuba-moo
authored andcommitted
ptp: ocp: fix use-after-free bugs causing by ptp_ocp_watchdog
The ptp_ocp_detach() only shuts down the watchdog timer if it is pending. However, if the timer handler is already running, the timer_delete_sync() is not called. This leads to race conditions where the devlink that contains the ptp_ocp is deallocated while the timer handler is still accessing it, resulting in use-after-free bugs. The following details one of the race scenarios. (thread 1) | (thread 2) ptp_ocp_remove() | ptp_ocp_detach() | ptp_ocp_watchdog() if (timer_pending(&bp->watchdog))| bp = timer_container_of() timer_delete_sync() | | devlink_free(devlink) //free | | bp-> //use Resolve this by unconditionally calling timer_delete_sync() to ensure the timer is reliably deactivated, preventing any access after free. Fixes: 773bda9 ("ptp: ocp: Expose various resources on the timecard.") Signed-off-by: Duoming Zhou <[email protected]> Reviewed-by: Vadim Fedorenko <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent b79e498 commit 8bf935c

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

drivers/ptp/ptp_ocp.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4557,8 +4557,7 @@ ptp_ocp_detach(struct ptp_ocp *bp)
45574557
ptp_ocp_debugfs_remove_device(bp);
45584558
ptp_ocp_detach_sysfs(bp);
45594559
ptp_ocp_attr_group_del(bp);
4560-
if (timer_pending(&bp->watchdog))
4561-
timer_delete_sync(&bp->watchdog);
4560+
timer_delete_sync(&bp->watchdog);
45624561
if (bp->ts0)
45634562
ptp_ocp_unregister_ext(bp->ts0);
45644563
if (bp->ts1)

0 commit comments

Comments
 (0)