From: Gavrilov Ilia Date: Thu, 7 Mar 2024 14:23:50 +0000 (+0000) Subject: ipmr: fix incorrect parameter validation in the ip_mroute_getsockopt() function X-Git-Tag: v6.9-rc1~159^2~32^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c3be3e0eb44b7f978bb6cbb20ad956adb93f736;p=thirdparty%2Fkernel%2Flinux.git ipmr: fix incorrect parameter validation in the ip_mroute_getsockopt() function The 'olr' variable can't be negative when assigned the result of 'min_t' because all 'min_t' parameters are cast to unsigned int, and then the minimum one is chosen. To fix the logic, check 'olr' as read from 'optlen', where the types of relevant variables are (signed) int. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Gavrilov Ilia Signed-off-by: David S. Miller --- diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 0708ac6f6c582..fd5c01c8489f0 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -1603,9 +1603,11 @@ int ip_mroute_getsockopt(struct sock *sk, int optname, sockptr_t optval, if (copy_from_sockptr(&olr, optlen, sizeof(int))) return -EFAULT; - olr = min_t(unsigned int, olr, sizeof(int)); if (olr < 0) return -EINVAL; + + olr = min_t(unsigned int, olr, sizeof(int)); + if (copy_to_sockptr(optlen, &olr, sizeof(int))) return -EFAULT; if (copy_to_sockptr(optval, &val, olr))