From: Gao Feng <f...@ikuai8.com> The function do_proc_dointvec_jiffies_conv uses LONG_MX/HZ as the max value to avoid overflow. But actually the *valp is int type, so it still causes overflow.
For example, echo 2147483647 > ./sys/net/ipv4/tcp_keepalive_time Then, cat ./sys/net/ipv4/tcp_keepalive_time The output is "-1", it is not expected. Now use INT_MAX/HZ as the max value instead LONG_MAX/HZ to fix it. Signed-off-by: Gao Feng <f...@ikuai8.com> --- kernel/sysctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/sysctl.c b/kernel/sysctl.c index acf0a5a..60474df 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2571,7 +2571,7 @@ static int do_proc_dointvec_jiffies_conv(bool *negp, unsigned long *lvalp, int write, void *data) { if (write) { - if (*lvalp > LONG_MAX / HZ) + if (*lvalp > INT_MAX / HZ) return 1; *valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ); } else { -- 1.9.1