forked from mirrors/linux
		
	rseq: Introduce feature size and alignment ELF auxiliary vector entries
Export the rseq feature size supported by the kernel as well as the required allocation alignment for the rseq per-thread area to user-space through ELF auxiliary vector entries. This is part of the extensible rseq ABI. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20221122203932.231377-3-mathieu.desnoyers@efficios.com
This commit is contained in:
		
							parent
							
								
									4842dadfc6
								
							
						
					
					
						commit
						317c8194e6
					
				
					 3 changed files with 12 additions and 0 deletions
				
			
		|  | @ -46,6 +46,7 @@ | |||
| #include <linux/cred.h> | ||||
| #include <linux/dax.h> | ||||
| #include <linux/uaccess.h> | ||||
| #include <linux/rseq.h> | ||||
| #include <asm/param.h> | ||||
| #include <asm/page.h> | ||||
| 
 | ||||
|  | @ -288,6 +289,10 @@ create_elf_tables(struct linux_binprm *bprm, const struct elfhdr *exec, | |||
| 	if (bprm->have_execfd) { | ||||
| 		NEW_AUX_ENT(AT_EXECFD, bprm->execfd); | ||||
| 	} | ||||
| #ifdef CONFIG_RSEQ | ||||
| 	NEW_AUX_ENT(AT_RSEQ_FEATURE_SIZE, offsetof(struct rseq, end)); | ||||
| 	NEW_AUX_ENT(AT_RSEQ_ALIGN, __alignof__(struct rseq)); | ||||
| #endif | ||||
| #undef NEW_AUX_ENT | ||||
| 	/* AT_NULL is zero; clear the rest too */ | ||||
| 	memset(elf_info, 0, (char *)mm->saved_auxv + | ||||
|  |  | |||
|  | @ -30,6 +30,8 @@ | |||
| 				 * differ from AT_PLATFORM. */ | ||||
| #define AT_RANDOM 25	/* address of 16 random bytes */ | ||||
| #define AT_HWCAP2 26	/* extension of AT_HWCAP */ | ||||
| #define AT_RSEQ_FEATURE_SIZE	27	/* rseq supported feature size */ | ||||
| #define AT_RSEQ_ALIGN		28	/* rseq allocation alignment */ | ||||
| 
 | ||||
| #define AT_EXECFN  31	/* filename of program */ | ||||
| 
 | ||||
|  |  | |||
|  | @ -130,6 +130,11 @@ struct rseq { | |||
| 	 *     this thread. | ||||
| 	 */ | ||||
| 	__u32 flags; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Flexible array member at end of structure, after last feature field. | ||||
| 	 */ | ||||
| 	char end[]; | ||||
| } __attribute__((aligned(4 * sizeof(__u64)))); | ||||
| 
 | ||||
| #endif /* _UAPI_LINUX_RSEQ_H */ | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Mathieu Desnoyers
						Mathieu Desnoyers