aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/include/asm/checksum_32.h
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2020-02-18 13:07:41 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2020-05-29 16:11:49 -0400
commit76666be8c9df456373a4e00ce51d2547f1d90627 (patch)
treea1245728e1f97d17492d19b2de4f31ddcd500f85 /arch/sparc/include/asm/checksum_32.h
parentparisc: turn csum_partial_copy_from_user() into csum_and_copy_from_user() (diff)
downloadlinux-dev-76666be8c9df456373a4e00ce51d2547f1d90627.tar.xz
linux-dev-76666be8c9df456373a4e00ce51d2547f1d90627.zip
sparc: switch to providing csum_and_copy_from_user()
sparc64 already is equivalent to that (trivial access_ok()); add it into sparc32 csum_partial_copy_from_user() and we can rename both to csum_and_copy_fromUser() and be done with that. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/sparc/include/asm/checksum_32.h')
-rw-r--r--arch/sparc/include/asm/checksum_32.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/sparc/include/asm/checksum_32.h b/arch/sparc/include/asm/checksum_32.h
index 450ddfb444c8..479a0b812af5 100644
--- a/arch/sparc/include/asm/checksum_32.h
+++ b/arch/sparc/include/asm/checksum_32.h
@@ -60,7 +60,7 @@ csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
}
static inline __wsum
-csum_partial_copy_from_user(const void __user *src, void *dst, int len,
+csum_and_copy_from_user(const void __user *src, void *dst, int len,
__wsum sum, int *err)
{
register unsigned long ret asm("o0") = (unsigned long)src;
@@ -68,6 +68,12 @@ csum_partial_copy_from_user(const void __user *src, void *dst, int len,
register int l asm("g1") = len;
register __wsum s asm("g7") = sum;
+ if (unlikely(!access_ok(src, len))) {
+ if (len)
+ *err = -EFAULT;
+ return sum;
+ }
+
__asm__ __volatile__ (
".section __ex_table,#alloc\n\t"
".align 4\n\t"