net: Convert move_addr_to_user() to scoped user access

move_addr_to_user() is a critical functions that was converted to
masked user access by commit 1fb0e47161 ("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>
master
Christophe Leroy (CS GROUP) 2026-03-10 12:33:36 +01:00 committed by Jakub Kicinski
parent dc9902bbd4
commit 17edc4e820
1 changed files with 11 additions and 17 deletions

View 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;
scoped_user_rw_access_size(ulen, 4, efault_end) {
unsafe_get_user(len, ulen, efault_end);
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);
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;
}