[PATCH] x86/uaccess: Avoid barrier_nospec() in copy_from_user()

Josh Poimboeuf jpoimboe at kernel.org
Mon Oct 21 10:14:43 AEDT 2024


On Sun, Oct 20, 2024 at 04:11:25PM -0700, Josh Poimboeuf wrote:
> #define FORCE_CANONICAL								\
> 	ALTERNATIVE_2								\
> 	"shl $(64 - 48), %rdx",							\
> 	"shl $(64 - 57), %rdx", X86_FEATURE_LA57,				\
			 ^^^^
			 these should be rax
> 	"", ALT_NOT(X86_FEATURE_LAM)
> 
> #ifdef CONFIG_X86_5LEVEL
> #define LOAD_TASK_SIZE_MINUS_N(n) \
> 	ALTERNATIVE __stringify(mov $((1 << 47) - 4096 - (n)),%rdx), \
> 		    __stringify(mov $((1 << 56) - 4096 - (n)),%rdx), X86_FEATURE_LA57
> #else
> #define LOAD_TASK_SIZE_MINUS_N(n) \
> 	mov $(TASK_SIZE_MAX - (n)),%_ASM_DX
> #endif
> 
> .macro check_range size
> .if IS_ENABLED(CONFIG_X86_64)
> 	FORCE_CANONICAL
> 	/* If above TASK_SIZE_MAX, convert to all 1's */
> 	LOAD_TASK_SIZE_MINUS_N(size-1)
> 	cmp %rax, %rdx
> 	sbb %rdx, %rdx
> 	or  %rdx, %rax

-- 
Josh


More information about the Linuxppc-dev mailing list