]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: Convert move_addr_to_user() to scoped user access
authorChristophe Leroy (CS GROUP) <chleroy@kernel.org>
Tue, 10 Mar 2026 11:33:36 +0000 (12:33 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Mar 2026 03:38:00 +0000 (20:38 -0700)
move_addr_to_user() is a critical functions that was converted to
masked user access by commit 1fb0e471611d ("net: remove one stac/clac
pair from move_addr_to_user()")

Convert it to scoped user access to simplify the code.

Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/36d7f2e7f504d620c1b88526b25ebc89e3cb61d9.1773142315.git.chleroy@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/socket.c

index 68829d09bcf1468dee49864c5e4ea52362c3c6c7..ade2ff5845a0c9eec6305f150345c15b97be0fe2 100644 (file)
@@ -280,23 +280,18 @@ static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen,
 
        BUG_ON(klen > sizeof(struct sockaddr_storage));
 
-       if (can_do_masked_user_access())
-               ulen = masked_user_access_begin(ulen);
-       else if (!user_access_begin(ulen, 4))
-               return -EFAULT;
-
-       unsafe_get_user(len, ulen, efault_end);
-
-       if (len > klen)
-               len = klen;
-       /*
-        *      "fromlen shall refer to the value before truncation.."
-        *                      1003.1g
-        */
-       if (len >= 0)
-               unsafe_put_user(klen, ulen, efault_end);
+       scoped_user_rw_access_size(ulen, 4, efault_end) {
+               unsafe_get_user(len, ulen, efault_end);
 
-       user_access_end();
+               if (len > klen)
+                       len = klen;
+               /*
+                *      "fromlen shall refer to the value before truncation.."
+                *                      1003.1g
+                */
+               if (len >= 0)
+                       unsafe_put_user(klen, ulen, efault_end);
+       }
 
        if (len) {
                if (len < 0)
@@ -309,7 +304,6 @@ static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen,
        return 0;
 
 efault_end:
-       user_access_end();
        return -EFAULT;
 }