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
parent
dc9902bbd4
commit
17edc4e820
28
net/socket.c
28
net/socket.c
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue