mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-10-26 10:57:38 +08:00
proc_int_k2u_conv_kop() returns the sign through *negp and the magnitude through *u_ptr. For a negative value it used to convert the sign-extended int and negate afterwards, so the magnitude came back as a wrapped 64-bit number. Nothing noticed, because no test wrote a negative value to a jiffies sysctl. Write one to each of the three int converters and require the value to read back unchanged. Each value is chosen to convert exactly at every CONFIG_HZ, so the test does not depend on it: converter write jiffies stored reads back jiffies -1 -HZ -1 ms_jiffies -1000 -HZ -1000 userhz_jiffies -100 -HZ -100 On a kernel without the fix, at CONFIG_HZ=250: # int_jiffies: got '-18372957097414713411', want '-1' # int_ms_jiffies: got '-18446744069414585320', want '-1000' # int_userhz_jiffies: got '-18446742229035144346', want '-100' not ok 1 test_int_jiffies_negative (paths shortened; the runner prints them under /proc/sys/debug/test_sysctl) Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com> Reviewed-by: Bradley Morgan <brads@mainlining.org> Tested-by: Bradley Morgan <brads@mainlining.org> Signed-off-by: Joel Granados <joel.granados@kernel.org>