CRIU and GDB need to get the current shadow stack and WRSS enablement status. This information is already available via /proc/pid/status, but this is inconvenient for CRIU because it involves parsing the text output in an area of the code where this is difficult. Provide a status arch_prctl(), ARCH_SHSTK_STATUS for retrieving the status. Have arg2 be a userspace address, and make the new arch_prctl simply copy the features out to userspace. Suggested-by: Mike Rapoport <rppt@kernel.org> Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Kees Cook <keescook@chromium.org> Acked-by: Mike Rapoport (IBM) <rppt@kernel.org> Tested-by: Pengfei Xu <pengfei.xu@intel.com> Tested-by: John Allen <john.allen@amd.com> Tested-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/all/20230613001108.3040476-43-rick.p.edgecombe%40intel.com
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 | 
						|
#ifndef _ASM_X86_PRCTL_H
 | 
						|
#define _ASM_X86_PRCTL_H
 | 
						|
 | 
						|
#define ARCH_SET_GS			0x1001
 | 
						|
#define ARCH_SET_FS			0x1002
 | 
						|
#define ARCH_GET_FS			0x1003
 | 
						|
#define ARCH_GET_GS			0x1004
 | 
						|
 | 
						|
#define ARCH_GET_CPUID			0x1011
 | 
						|
#define ARCH_SET_CPUID			0x1012
 | 
						|
 | 
						|
#define ARCH_GET_XCOMP_SUPP		0x1021
 | 
						|
#define ARCH_GET_XCOMP_PERM		0x1022
 | 
						|
#define ARCH_REQ_XCOMP_PERM		0x1023
 | 
						|
#define ARCH_GET_XCOMP_GUEST_PERM	0x1024
 | 
						|
#define ARCH_REQ_XCOMP_GUEST_PERM	0x1025
 | 
						|
 | 
						|
#define ARCH_XCOMP_TILECFG		17
 | 
						|
#define ARCH_XCOMP_TILEDATA		18
 | 
						|
 | 
						|
#define ARCH_MAP_VDSO_X32		0x2001
 | 
						|
#define ARCH_MAP_VDSO_32		0x2002
 | 
						|
#define ARCH_MAP_VDSO_64		0x2003
 | 
						|
 | 
						|
/* Don't use 0x3001-0x3004 because of old glibcs */
 | 
						|
 | 
						|
#define ARCH_GET_UNTAG_MASK		0x4001
 | 
						|
#define ARCH_ENABLE_TAGGED_ADDR		0x4002
 | 
						|
#define ARCH_GET_MAX_TAG_BITS		0x4003
 | 
						|
#define ARCH_FORCE_TAGGED_SVA		0x4004
 | 
						|
 | 
						|
#define ARCH_SHSTK_ENABLE		0x5001
 | 
						|
#define ARCH_SHSTK_DISABLE		0x5002
 | 
						|
#define ARCH_SHSTK_LOCK			0x5003
 | 
						|
#define ARCH_SHSTK_UNLOCK		0x5004
 | 
						|
#define ARCH_SHSTK_STATUS		0x5005
 | 
						|
 | 
						|
/* ARCH_SHSTK_ features bits */
 | 
						|
#define ARCH_SHSTK_SHSTK		(1ULL <<  0)
 | 
						|
#define ARCH_SHSTK_WRSS			(1ULL <<  1)
 | 
						|
 | 
						|
#endif /* _ASM_X86_PRCTL_H */
 |