Commit 7472199a authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/uaccess: Swap clear_user() and __clear_user()

It is clear_user() which is expected to call __clear_user(),
not the reverse.
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/d8ec01fb22f33d87321451d5e5f01cb56dacaa39.1615398498.git.christophe.leroy@csgroup.eu
parent c6adc835
...@@ -414,21 +414,20 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n) ...@@ -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); 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(); might_fault();
if (likely(access_ok(addr, size))) { allow_write_to_user(addr, size);
allow_write_to_user(addr, size); ret = __arch_clear_user(addr, size);
ret = __arch_clear_user(addr, size); prevent_write_to_user(addr, size);
prevent_write_to_user(addr, size);
}
return ret; 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); extern long strncpy_from_user(char *dst, const char __user *src, long count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment