diff options
Diffstat (limited to 'arch/x86/lib/getuser.S')
| -rw-r--r-- | arch/x86/lib/getuser.S | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/lib/getuser.S b/arch/x86/lib/getuser.S index c97d935a29e8..49b167f73215 100644 --- a/arch/x86/lib/getuser.S +++ b/arch/x86/lib/getuser.S @@ -40,6 +40,8 @@ ENTRY(__get_user_1)  	mov PER_CPU_VAR(current_task), %_ASM_DX  	cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX  	jae bad_get_user +	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */ +	and %_ASM_DX, %_ASM_AX  	ASM_STAC  1:	movzbl (%_ASM_AX),%edx  	xor %eax,%eax @@ -54,6 +56,8 @@ ENTRY(__get_user_2)  	mov PER_CPU_VAR(current_task), %_ASM_DX  	cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX  	jae bad_get_user +	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */ +	and %_ASM_DX, %_ASM_AX  	ASM_STAC  2:	movzwl -1(%_ASM_AX),%edx  	xor %eax,%eax @@ -68,6 +72,8 @@ ENTRY(__get_user_4)  	mov PER_CPU_VAR(current_task), %_ASM_DX  	cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX  	jae bad_get_user +	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */ +	and %_ASM_DX, %_ASM_AX  	ASM_STAC  3:	movl -3(%_ASM_AX),%edx  	xor %eax,%eax @@ -83,6 +89,8 @@ ENTRY(__get_user_8)  	mov PER_CPU_VAR(current_task), %_ASM_DX  	cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX  	jae bad_get_user +	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */ +	and %_ASM_DX, %_ASM_AX  	ASM_STAC  4:	movq -7(%_ASM_AX),%rdx  	xor %eax,%eax @@ -94,6 +102,8 @@ ENTRY(__get_user_8)  	mov PER_CPU_VAR(current_task), %_ASM_DX  	cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX  	jae bad_get_user_8 +	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */ +	and %_ASM_DX, %_ASM_AX  	ASM_STAC  4:	movl -7(%_ASM_AX),%edx  5:	movl -3(%_ASM_AX),%ecx  |