[tip: timers/core] timekeeping: Check the return value of tk_get_aux_ts64 in __do_adjtimex()

tip-bot2 for Thomas Weißschuh (Schneider Electric) <[email protected]>
Newsgroups org.kernel.vger.linux-kernel,org.kernel.vger.stable
Message-ID <178639306244.442315.1016762624170879875.tip-bot2@tip-bot2>
The following commit has been merged into the timers/core branch of tip:

Commit-ID:     4b61084b11bcecce86d03804ff30f8d7b465593c
Gitweb:        https://git.kernel.org/tip/4b61084b11bcecce86d03804ff30f8d7b465593c
Author:        Thomas Weißschuh (Schneider Electric) <[email protected]>
AuthorDate:    Fri, 31 Jul 2026 16:17:43 +02:00
Committer:     Thomas Gleixner <[email protected]>
CommitterDate: Mon, 10 Aug 2026 22:16:34 +02:00

timekeeping: Check the return value of tk_get_aux_ts64 in __do_adjtimex()

If the auxiliary clock is disabled during tk_get_aux_ts64() but is enabled
before tks->clock_valid is checked, then uninitialized stackdata will be
used in the calculations and indirectly leaked to userspace.

The same race window also exists after this change and also for the core
timekeeper. But in these cases the only effect would be incorrect
adjustments and this is userspace's responsibility to avoid this.

Fixes: 4eca49d0b621 ("timekeeping: Prepare do_adtimex() for auxiliary clocks")
Signed-off-by: Thomas Weißschuh (Schneider Electric) <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Cc: [email protected]
Link: https://patch.msgid.link/20260731-timekeeping-aux-adjtimex-return-v1-1-b7fea4692886@linutronix.de
---
 kernel/time/timekeeping.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index c4230f4..c1863f2 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -3025,10 +3025,12 @@ static int __do_adjtimex(struct tk_data *tkd, struct __kernel_timex *txc,
 		return ret;
 	add_device_randomness(txc, sizeof(*txc));
 
-	if (!aux_clock)
+	if (!aux_clock) {
 		ktime_get_real_ts64(&ts);
-	else
-		tk_get_aux_ts64(tkd->timekeeper.id, &ts);
+	} else {
+		if (!tk_get_aux_ts64(tkd->timekeeper.id, &ts))
+			return -ENODEV;
+	}
 
 	add_device_randomness(&ts, sizeof(ts));
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.