No need of likely/unlikely on calls of check_copy_size()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 6 Jun 2022 22:42:59 +0000 (18:42 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 7 Jun 2022 20:18:08 +0000 (16:18 -0400)
it's inline and unlikely() inside of it (including the implicit one
in WARN_ON_ONCE()) suffice to convince the compiler that getting
false from check_copy_size() is unlikely.

Spotted-by: Jens Axboe <axboe@kernel.dk>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/powerpc/include/asm/uaccess.h
arch/s390/include/asm/uaccess.h
include/linux/uaccess.h
include/linux/uio.h

index 9b82b38ff867ba769826411685ab150d6627944d..105f200b1e31d8ebdfec39fe45f7f96f13d75a47 100644 (file)
@@ -348,7 +348,7 @@ copy_mc_to_kernel(void *to, const void *from, unsigned long size)
 static inline unsigned long __must_check
 copy_mc_to_user(void __user *to, const void *from, unsigned long n)
 {
-       if (likely(check_copy_size(from, n, true))) {
+       if (check_copy_size(from, n, true)) {
                if (access_ok(to, n)) {
                        allow_write_to_user(to, n);
                        n = copy_mc_generic((void *)to, from, n);
index f4511e21d646ca5a8eec3b66e0f8176f795c9f86..c2c9995466e097e50f547c0f0fe5c041fb8d72fb 100644 (file)
@@ -39,7 +39,7 @@ _copy_from_user_key(void *to, const void __user *from, unsigned long n, unsigned
 static __always_inline unsigned long __must_check
 copy_from_user_key(void *to, const void __user *from, unsigned long n, unsigned long key)
 {
-       if (likely(check_copy_size(to, n, false)))
+       if (check_copy_size(to, n, false))
                n = _copy_from_user_key(to, from, n, key);
        return n;
 }
@@ -50,7 +50,7 @@ _copy_to_user_key(void __user *to, const void *from, unsigned long n, unsigned l
 static __always_inline unsigned long __must_check
 copy_to_user_key(void __user *to, const void *from, unsigned long n, unsigned long key)
 {
-       if (likely(check_copy_size(from, n, true)))
+       if (check_copy_size(from, n, true))
                n = _copy_to_user_key(to, from, n, key);
        return n;
 }
index 5a328cf02b75ecb1afe27c570317c1964742751e..47e5d374c7ebec86306b31d3d46665ca1c39f583 100644 (file)
@@ -148,7 +148,7 @@ _copy_to_user(void __user *, const void *, unsigned long);
 static __always_inline unsigned long __must_check
 copy_from_user(void *to, const void __user *from, unsigned long n)
 {
-       if (likely(check_copy_size(to, n, false)))
+       if (check_copy_size(to, n, false))
                n = _copy_from_user(to, from, n);
        return n;
 }
@@ -156,7 +156,7 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
 static __always_inline unsigned long __must_check
 copy_to_user(void __user *to, const void *from, unsigned long n)
 {
-       if (likely(check_copy_size(from, n, true)))
+       if (check_copy_size(from, n, true))
                n = _copy_to_user(to, from, n);
        return n;
 }
index 739285fe5a2f211ea0e668d31f58c5700b5475ab..76d305f3d4c233b20b55c7e646ad6ea22af1d228 100644 (file)
@@ -156,19 +156,17 @@ static inline size_t copy_folio_to_iter(struct folio *folio, size_t offset,
 static __always_inline __must_check
 size_t copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
 {
-       if (unlikely(!check_copy_size(addr, bytes, true)))
-               return 0;
-       else
+       if (check_copy_size(addr, bytes, true))
                return _copy_to_iter(addr, bytes, i);
+       return 0;
 }
 
 static __always_inline __must_check
 size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
 {
-       if (unlikely(!check_copy_size(addr, bytes, false)))
-               return 0;
-       else
+       if (check_copy_size(addr, bytes, false))
                return _copy_from_iter(addr, bytes, i);
+       return 0;
 }
 
 static __always_inline __must_check
@@ -184,10 +182,9 @@ bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i)
 static __always_inline __must_check
 size_t copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
 {
-       if (unlikely(!check_copy_size(addr, bytes, false)))
-               return 0;
-       else
+       if (check_copy_size(addr, bytes, false))
                return _copy_from_iter_nocache(addr, bytes, i);
+       return 0;
 }
 
 static __always_inline __must_check