diff options
Diffstat (limited to 'arch/x86/lib/csum-wrappers_64.c')
| -rw-r--r-- | arch/x86/lib/csum-wrappers_64.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c index 459b58a8a15..7609e0e421e 100644 --- a/arch/x86/lib/csum-wrappers_64.c +++ b/arch/x86/lib/csum-wrappers_64.c @@ -6,6 +6,7 @@   */  #include <asm/checksum.h>  #include <linux/module.h> +#include <asm/smap.h>  /**   * csum_partial_copy_from_user - Copy and checksum from user space. @@ -52,8 +53,10 @@ csum_partial_copy_from_user(const void __user *src, void *dst,  			len -= 2;  		}  	} +	stac();  	isum = csum_partial_copy_generic((__force const void *)src,  				dst, len, isum, errp, NULL); +	clac();  	if (unlikely(*errp))  		goto out_err; @@ -82,6 +85,8 @@ __wsum  csum_partial_copy_to_user(const void *src, void __user *dst,  			  int len, __wsum isum, int *errp)  { +	__wsum ret; +  	might_sleep();  	if (unlikely(!access_ok(VERIFY_WRITE, dst, len))) { @@ -105,8 +110,11 @@ csum_partial_copy_to_user(const void *src, void __user *dst,  	}  	*errp = 0; -	return csum_partial_copy_generic(src, (void __force *)dst, -					 len, isum, NULL, errp); +	stac(); +	ret = csum_partial_copy_generic(src, (void __force *)dst, +					len, isum, NULL, errp); +	clac(); +	return ret;  }  EXPORT_SYMBOL(csum_partial_copy_to_user); @@ -115,7 +123,7 @@ EXPORT_SYMBOL(csum_partial_copy_to_user);   * @src: source address   * @dst: destination address   * @len: number of bytes to be copied. - * @isum: initial sum that is added into the result (32bit unfolded) + * @sum: initial sum that is added into the result (32bit unfolded)   *   * Returns an 32bit unfolded checksum of the buffer.   */  | 
