]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: Make copy_safe_from_sockptr() match documentation
authorMichal Luczaj <mhal@rbox.co>
Sun, 10 Nov 2024 23:17:34 +0000 (00:17 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 14 Nov 2024 03:29:46 +0000 (19:29 -0800)
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>
include/linux/sockptr.h

index fc5a206c40435fca5bc97e9e44f47277ac2aa04c..195debe2b1dbc5abf768aa806eb6c73b99421e27 100644 (file)
@@ -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,