Re: [PATCH] 2.4.19 do_adjtimex parameter checking

Ulrich Windl (Ulrich.Windl@rz.uni-regensburg.de)
Thu, 21 Mar 2002 16:22:27 +0100


On 21 Mar 2002, at 8:40, Paul Gortmaker wrote to me:

> Spotted by Tajthy.Tamas @ datentechnik.hu:
>
> Adjtimex modes may contain other bits set in addition to
> ADJ_OFFSET_SINGLESHOT bits, and hence tests for strict (in)equality
> are not appropriate - must test for ADJ_OFFSET_SINGLESHOT
> bits set in modes. Three places in the code where this test
> is made - oddly enough the 3rd is already correct.

Hello,
masters of the bits,

basically no: adjtimex() is either adjtime() or ntp_adjtime or
ntp_gettime(). While one could think to set multiple bit combinations,
it was never intended. At the user level adjtimex() should never have
existed. This patch would open a new incompatible use of adjtimex() by
blessing what was illegal before IMHO.

ADJ_OFFSET_SINGLESHOT has be be used alone, specifically also to return
the correct return value.

Regards,
Ulrich

>
>
> --- linux/kernel/time.c~ Thu Feb 28 09:37:32 2002
> +++ linux/kernel/time.c Thu Mar 21 08:27:49 2002
> @@ -216,7 +216,7 @@
>
> /* Now we validate the data before disabling interrupts */
>
> - if (txc->modes != ADJ_OFFSET_SINGLESHOT && (txc->modes & ADJ_OFFSET))
> + if (((txc->modes & ADJ_OFFSET_SINGLESHOT) != ADJ_OFFSET_SINGLESHOT) && (txc->modes & ADJ_OFFSET))
> /* adjustment Offset limited to +- .512 seconds */
> if (txc->offset <= - MAXPHASE || txc->offset >= MAXPHASE )
> return -EINVAL;
> @@ -275,7 +275,7 @@
> }
>
> if (txc->modes & ADJ_OFFSET) { /* values checked earlier */
> - if (txc->modes == ADJ_OFFSET_SINGLESHOT) {
> + if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT) {
> /* adjtime() is independent from ntp_adjtime() */
> time_adjust = txc->offset;
> }
>
>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/