--- zzzz-none-000/linux-3.10.107/arch/mips/include/asm/checksum.h 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/arch/mips/include/asm/checksum.h 2021-11-10 11:53:53.000000000 +0000 @@ -31,6 +31,12 @@ __wsum __csum_partial_copy_user(const void *src, void *dst, int len, __wsum sum, int *err_ptr); +#ifdef CONFIG_EVA +__wsum __csum_partial_copy_fromuser(const void *src, void *dst, + int len, __wsum sum, int *err_ptr); +__wsum __csum_partial_copy_touser(const void *src, void *dst, + int len, __wsum sum, int *err_ptr); +#endif /* * this is a new version of the above that records errors it finds in *errp, @@ -40,9 +46,34 @@ __wsum csum_partial_copy_from_user(const void __user *src, void *dst, int len, __wsum sum, int *err_ptr) { +#ifndef CONFIG_EVA might_fault(); return __csum_partial_copy_user((__force void *)src, dst, - len, sum, err_ptr); + len, sum, err_ptr); +#else + if (segment_eq(get_fs(), KERNEL_DS)) + return __csum_partial_copy_user((__force void *)src, dst, + len, sum, err_ptr); + else { + might_fault(); + return __csum_partial_copy_fromuser((__force void *)src, dst, + len, sum, err_ptr); + } +#endif +} + +#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER +static inline +__wsum csum_and_copy_from_user (const void __user *src, void *dst, + int len, __wsum sum, int *err_ptr) +{ + if (access_ok(VERIFY_READ, src, len)) + return csum_partial_copy_from_user(src, dst, len, sum, err_ptr); + + if (len) + *err_ptr = -EFAULT; + + return sum; } /* @@ -53,10 +84,22 @@ __wsum csum_and_copy_to_user(const void *src, void __user *dst, int len, __wsum sum, int *err_ptr) { - might_fault(); - if (access_ok(VERIFY_WRITE, dst, len)) + if (access_ok(VERIFY_WRITE, dst, len)) { +#ifndef CONFIG_EVA + might_fault(); return __csum_partial_copy_user(src, (__force void *)dst, - len, sum, err_ptr); + len, sum, err_ptr); +#else + if (segment_eq(get_fs(), KERNEL_DS)) + return __csum_partial_copy_user(src, (__force void *)dst, + len, sum, err_ptr); + else { + might_fault(); + return __csum_partial_copy_touser(src, (__force void *)dst, + len, sum, err_ptr); + } +#endif + } if (len) *err_ptr = -EFAULT;