summaryrefslogtreecommitdiff
path: root/drivers/ptp
diff options
context:
space:
mode:
authorAjay Kaher <ajay.kaher@broadcom.com>2024-11-25 10:59:54 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-12-14 19:59:34 +0100
commit70966e5bafb782b917b83a3ef62c658b482f9239 (patch)
tree0087e2ac4addf948b5c094b6ab25c72f2235c779 /drivers/ptp
parent66127f0d1ecf00604aeab71132bde398fd9ec7c9 (diff)
downloadlinux-70966e5bafb782b917b83a3ef62c658b482f9239.tar.gz
linux-70966e5bafb782b917b83a3ef62c658b482f9239.tar.bz2
linux-70966e5bafb782b917b83a3ef62c658b482f9239.zip
ptp: Add error handling for adjfine callback in ptp_clock_adjtime
[ Upstream commit 98337d7c87577ded71114f6976edb70a163e27bc ] ptp_clock_adjtime sets ptp->dialed_frequency even when adjfine callback returns an error. This causes subsequent reads to return an incorrect value. Fix this by adding error check before ptp->dialed_frequency is set. Fixes: 39a8cbd9ca05 ("ptp: remember the adjusted frequency") Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com> Acked-by: Richard Cochran <richardcochran@gmail.com> Link: https://patch.msgid.link/20241125105954.1509971-1-ajay.kaher@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers/ptp')
-rw-r--r--drivers/ptp/ptp_clock.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
index 9a50bfb56453..b586da2e3002 100644
--- a/drivers/ptp/ptp_clock.c
+++ b/drivers/ptp/ptp_clock.c
@@ -133,7 +133,8 @@ static int ptp_clock_adjtime(struct posix_clock *pc, struct __kernel_timex *tx)
if (ppb > ops->max_adj || ppb < -ops->max_adj)
return -ERANGE;
err = ops->adjfine(ops, tx->freq);
- ptp->dialed_frequency = tx->freq;
+ if (!err)
+ ptp->dialed_frequency = tx->freq;
} else if (tx->modes & ADJ_OFFSET) {
if (ops->adjphase) {
s32 max_phase_adj = ops->getmaxphase(ops);