From: Liping Zhang Date: Fri, 7 Apr 2017 15:51:07 +0000 (+0800) Subject: sysctl: report EINVAL if value is larger than UINT_MAX for proc_douintvec X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=7bdacd3d9f4e7db08d5fde7758819c36d6ced11e;p=GitHub%2FLineageOS%2FG12%2Fandroid_kernel_amlogic_linux-4.9.git sysctl: report EINVAL if value is larger than UINT_MAX for proc_douintvec commit 425fffd886bae3d127a08fa6a17f2e31e24ed7ff upstream. Currently, inputting the following command will succeed but actually the value will be truncated: # echo 0x12ffffffff > /proc/sys/net/ipv4/tcp_notsent_lowat This is not friendly to the user, so instead, we should report error when the value is larger than UINT_MAX. Fixes: e7d316a02f68 ("sysctl: handle error writing UINT_MAX to u32 fields") Signed-off-by: Liping Zhang Cc: Subash Abhinov Kasiviswanathan Cc: Andrew Morton Cc: Eric W. Biederman Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- diff --git a/kernel/sysctl.c b/kernel/sysctl.c index e8c1743fcc10..265e0d0216e3 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2146,6 +2146,8 @@ static int do_proc_douintvec_conv(bool *negp, unsigned long *lvalp, if (write) { if (*negp) return -EINVAL; + if (*lvalp > UINT_MAX) + return -EINVAL; *valp = *lvalp; } else { unsigned int val = *valp;