mirror of
https://github.com/torvalds/linux.git
synced 2026-10-23 15:32:04 +02:00
time/jiffies: Saturate in mult_hz() instead of wrapping
Return ULONG_MAX for values that don't fit an unsigned long.
proc_int_u2k_conv_uop() now correctly rejects a result above INT_MAX.
This is the erroneous behaviour that is being fixed. The input has to
exceed ULONG_MAX / HZ for the product to wrap, so the value below is
specific to CONFIG_HZ=1000:
# echo 18446744073709552 > /proc/sys/net/ipv4/tcp_keepalive_time
# cat /proc/sys/net/ipv4/tcp_keepalive_time
0
That value is now rejected with an error.
The original bound ("*u_ptr > INT_MAX / HZ") was removed in commit
2dc164a48e ("sysctl: Create converter functions with two new macros").
Fixes: 2dc164a48e ("sysctl: Create converter functions with two new macros")
Cc: stable@vger.kernel.org
Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com>
Signed-off-by: Joel Granados <joel.granados@kernel.org>
This commit is contained in:
parent
e955f14fa8
commit
fdd6553e1e
|
|
@ -101,6 +101,8 @@ void __init register_refined_jiffies(long cycles_per_second)
|
|||
#ifdef CONFIG_SYSCTL
|
||||
static ulong mult_hz(const ulong val)
|
||||
{
|
||||
if (val >= ULONG_MAX / HZ)
|
||||
return ULONG_MAX;
|
||||
return val * HZ;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user