]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
powerpc/uaccess: Swap clear_user() and __clear_user()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Wed, 10 Mar 2021 17:57:01 +0000 (17:57 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 26 Mar 2021 12:19:42 +0000 (23:19 +1100)
It is clear_user() which is expected to call __clear_user(),
not the reverse.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/d8ec01fb22f33d87321451d5e5f01cb56dacaa39.1615398498.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/uaccess.h

index 2c09cff205efbf87ad28973194aa7900574a4e7b..1c1d404514b1086732ff2995f5f0980cae337568 100644 (file)
@@ -414,21 +414,20 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n)
 
 unsigned long __arch_clear_user(void __user *addr, unsigned long size);
 
-static inline unsigned long clear_user(void __user *addr, unsigned long size)
+static inline unsigned long __clear_user(void __user *addr, unsigned long size)
 {
-       unsigned long ret = size;
+       unsigned long ret;
+
        might_fault();
-       if (likely(access_ok(addr, size))) {
-               allow_write_to_user(addr, size);
-               ret = __arch_clear_user(addr, size);
-               prevent_write_to_user(addr, size);
-       }
+       allow_write_to_user(addr, size);
+       ret = __arch_clear_user(addr, size);
+       prevent_write_to_user(addr, size);
        return ret;
 }
 
-static inline unsigned long __clear_user(void __user *addr, unsigned long size)
+static inline unsigned long clear_user(void __user *addr, unsigned long size)
 {
-       return clear_user(addr, size);
+       return likely(access_ok(addr, size)) ? __clear_user(addr, size) : size;
 }
 
 extern long strncpy_from_user(char *dst, const char __user *src, long count);