diff options
author | Michal Luczaj <mhal@rbox.co> | 2024-11-11 00:17:34 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-11-13 19:29:46 -0800 |
commit | eb94b7bb10109a14a5431a67e5d8e31cfa06b395 (patch) | |
tree | 328bdb60261e9fdc845040a3538c96402d8dd543 /include | |
parent | a03b18a71c128846360cc81ac6fdb0e7d41597b4 (diff) |
net: Make copy_safe_from_sockptr() match documentation
copy_safe_from_sockptr()
return copy_from_sockptr()
return copy_from_sockptr_offset()
return copy_from_user()
copy_from_user() does not return an error on fault. Instead, it returns a
number of bytes that were not copied. Have it handled.
Patch has a side effect: it un-breaks garbage input handling of
nfc_llcp_setsockopt() and mISDN's data_sock_setsockopt().
Fixes: 6309863b31dd ("net: add copy_safe_from_sockptr() helper")
Signed-off-by: Michal Luczaj <mhal@rbox.co>
Link: https://patch.msgid.link/20241111-sockptr-copy-ret-fix-v1-1-a520083a93fb@rbox.co
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/sockptr.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/sockptr.h b/include/linux/sockptr.h index fc5a206c4043..195debe2b1db 100644 --- a/include/linux/sockptr.h +++ b/include/linux/sockptr.h @@ -77,7 +77,9 @@ static inline int copy_safe_from_sockptr(void *dst, size_t ksize, { if (optlen < ksize) return -EINVAL; - return copy_from_sockptr(dst, optval, ksize); + if (copy_from_sockptr(dst, optval, ksize)) + return -EFAULT; + return 0; } static inline int copy_struct_from_sockptr(void *dst, size_t ksize, |