diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 5df92735b88217f3766e2629e2245f082f7ecce8..efc7bf912b193b07cdd3cc854e55da2b4635be04 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1283,9 +1283,12 @@ static int do_proc_dointvec_jiffies_conv(bool *negp, unsigned long *lvalp, if (write) { if (*lvalp > INT_MAX / HZ) return 1; - *valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ); + if (*negp) + WRITE_ONCE(*valp, -*lvalp * HZ); + else + WRITE_ONCE(*valp, *lvalp * HZ); } else { - int val = *valp; + int val = READ_ONCE(*valp); unsigned long lval; if (val < 0) { *negp = true;