net: Add a len argument to compat_ipv6_get_msfilter()
authorMartin KaFai Lau <martin.lau@kernel.org>
Fri, 2 Sep 2022 00:28:46 +0000 (17:28 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 3 Sep 2022 03:34:31 +0000 (20:34 -0700)
Pass the len to the compat_ipv6_get_msfilter() instead of
compat_ipv6_get_msfilter() getting it again from optlen.
Its counter part ipv6_get_msfilter() is also taking the
len from do_ipv6_getsockopt().

Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://lore.kernel.org/r/20220902002846.2892091-1-kafai@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
net/ipv6/ipv6_sockglue.c

index 2894271..4ab284a 100644 (file)
@@ -1093,17 +1093,15 @@ static int ipv6_get_msfilter(struct sock *sk, void __user *optval,
 }
 
 static int compat_ipv6_get_msfilter(struct sock *sk, void __user *optval,
-               int __user *optlen)
+               int __user *optlen, int len)
 {
        const int size0 = offsetof(struct compat_group_filter, gf_slist_flex);
        struct compat_group_filter __user *p = optval;
        struct compat_group_filter gf32;
        struct group_filter gf;
-       int len, err;
+       int err;
        int num;
 
-       if (get_user(len, optlen))
-               return -EFAULT;
        if (len < size0)
                return -EINVAL;
 
@@ -1156,7 +1154,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                break;
        case MCAST_MSFILTER:
                if (in_compat_syscall())
-                       return compat_ipv6_get_msfilter(sk, optval, optlen);
+                       return compat_ipv6_get_msfilter(sk, optval, optlen, len);
                return ipv6_get_msfilter(sk, optval, optlen, len);
        case IPV6_2292PKTOPTIONS:
        {