diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2020-02-18 21:01:02 +0300 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2020-05-29 23:11:49 +0300 |
commit | 77a8710ba7ef7ffcb71f0618bddf78c1b04f01d3 (patch) | |
tree | da070d513882510df04191e3c3bda35473fcd328 | |
parent | 808b49da54e640cba5c5c92dee658018a529226b (diff) | |
download | linux-77a8710ba7ef7ffcb71f0618bddf78c1b04f01d3.tar.xz |
parisc: turn csum_partial_copy_from_user() into csum_and_copy_from_user()
Already has the right semantics. Incidentally. failing copy_from_user()
zeroes the tail of destination - no need to repeat that manually
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | arch/parisc/include/asm/checksum.h | 3 | ||||
-rw-r--r-- | arch/parisc/lib/checksum.c | 12 |
2 files changed, 5 insertions, 10 deletions
diff --git a/arch/parisc/include/asm/checksum.h b/arch/parisc/include/asm/checksum.h index c1c22819a04d..7c69ce9634c7 100644 --- a/arch/parisc/include/asm/checksum.h +++ b/arch/parisc/include/asm/checksum.h @@ -26,11 +26,12 @@ extern __wsum csum_partial(const void *, int, __wsum); */ extern __wsum csum_partial_copy_nocheck(const void *, void *, int, __wsum); +#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER /* * this is a new version of the above that records errors it finds in *errp, * but continues and zeros the rest of the buffer. */ -extern __wsum csum_partial_copy_from_user(const void __user *src, +extern __wsum csum_and_copy_from_user(const void __user *src, void *dst, int len, __wsum sum, int *errp); /* diff --git a/arch/parisc/lib/checksum.c b/arch/parisc/lib/checksum.c index 256322c7b648..4e47c2ff2bcd 100644 --- a/arch/parisc/lib/checksum.c +++ b/arch/parisc/lib/checksum.c @@ -128,18 +128,12 @@ EXPORT_SYMBOL(csum_partial_copy_nocheck); * Copy from userspace and compute checksum. If we catch an exception * then zero the rest of the buffer. */ -__wsum csum_partial_copy_from_user(const void __user *src, +__wsum csum_and_copy_from_user(const void __user *src, void *dst, int len, __wsum sum, int *err_ptr) { - int missing; - - missing = copy_from_user(dst, src, len); - if (missing) { - memset(dst + len - missing, 0, missing); + if (copy_from_user(dst, src, len)) *err_ptr = -EFAULT; - } - return csum_partial(dst, len, sum); } -EXPORT_SYMBOL(csum_partial_copy_from_user); +EXPORT_SYMBOL(csum_and_copy_from_user); |