Skip to content

Commit f10d3c7

Browse files
stonezdmgregkh
authored andcommitted
ptp: ocp: fix use-after-free bugs causing by ptp_ocp_watchdog
[ Upstream commit 8bf935c ] 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 <duoming@zju.edu.cn> Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Link: https://patch.msgid.link/20250828082949.28189-1-duoming@zju.edu.cn Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 07edb77 commit f10d3c7

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)