mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
timekeeping: Fix timex status validation for auxiliary clocks
[ Upstream commite48a869957] The timekeeping_validate_timex() function validates the timex status of an auxiliary system clock even when the status is not to be changed, which causes unexpected errors for applications that make read-only clock_adjtime() calls, or set some other timex fields, but without clearing the status field. Do the AUX-specific status validation only when the modes field contains ADJ_STATUS, i.e. the application is actually trying to change the status. This makes the AUX-specific clock_adjtime() behavior consistent with CLOCK_REALTIME. Fixes:4eca49d0b6("timekeeping: Prepare do_adtimex() for auxiliary clocks") Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com> Signed-off-by: Thomas Gleixner <tglx@kernel.org> Link: https://patch.msgid.link/20260225085231.276751-1-mlichvar@redhat.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Sasha Levin
parent
5a501379a0
commit
de4ea10ae6
@@ -2639,7 +2639,8 @@ static int timekeeping_validate_timex(const struct __kernel_timex *txc, bool aux
|
||||
|
||||
if (aux_clock) {
|
||||
/* Auxiliary clocks are similar to TAI and do not have leap seconds */
|
||||
if (txc->status & (STA_INS | STA_DEL))
|
||||
if (txc->modes & ADJ_STATUS &&
|
||||
txc->status & (STA_INS | STA_DEL))
|
||||
return -EINVAL;
|
||||
|
||||
/* No TAI offset setting */
|
||||
@@ -2647,7 +2648,8 @@ static int timekeeping_validate_timex(const struct __kernel_timex *txc, bool aux
|
||||
return -EINVAL;
|
||||
|
||||
/* No PPS support either */
|
||||
if (txc->status & (STA_PPSFREQ | STA_PPSTIME))
|
||||
if (txc->modes & ADJ_STATUS &&
|
||||
txc->status & (STA_PPSFREQ | STA_PPSTIME))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user