| .. | .. | 
|---|
| 10 | 10 |  #include <asm/ptrace.h> | 
|---|
| 11 | 11 |  #include <asm/user.h> | 
|---|
| 12 | 12 |  #include <asm/auxvec.h> | 
|---|
 | 13 | +#include <asm/fsgsbase.h>  | 
|---|
| 13 | 14 |   | 
|---|
| 14 | 15 |  typedef unsigned long elf_greg_t; | 
|---|
| 15 | 16 |   | 
|---|
| .. | .. | 
|---|
| 19 | 20 |  typedef struct user_i387_struct elf_fpregset_t; | 
|---|
| 20 | 21 |   | 
|---|
| 21 | 22 |  #ifdef __i386__ | 
|---|
| 22 |  | -  | 
|---|
| 23 |  | -typedef struct user_fxsr_struct elf_fpxregset_t;  | 
|---|
| 24 | 23 |   | 
|---|
| 25 | 24 |  #define R_386_NONE	0 | 
|---|
| 26 | 25 |  #define R_386_32	1 | 
|---|
| .. | .. | 
|---|
| 62 | 61 |  #define R_X86_64_PC16		13	/* 16 bit sign extended pc relative */ | 
|---|
| 63 | 62 |  #define R_X86_64_8		14	/* Direct 8 bit sign extended  */ | 
|---|
| 64 | 63 |  #define R_X86_64_PC8		15	/* 8 bit sign extended pc relative */ | 
|---|
| 65 |  | -  | 
|---|
| 66 |  | -#define R_X86_64_NUM		16  | 
|---|
 | 64 | +#define R_X86_64_PC64		24	/* Place relative 64-bit signed */  | 
|---|
| 67 | 65 |   | 
|---|
| 68 | 66 |  /* | 
|---|
| 69 | 67 |   * These are used to set parameters in the core dumps. | 
|---|
| .. | .. | 
|---|
| 205 | 203 |   | 
|---|
| 206 | 204 |  #define ELF_CORE_COPY_REGS(pr_reg, regs)			\ | 
|---|
| 207 | 205 |  do {								\ | 
|---|
| 208 |  | -	unsigned long base;					\  | 
|---|
| 209 | 206 |  	unsigned v;						\ | 
|---|
| 210 | 207 |  	(pr_reg)[0] = (regs)->r15;				\ | 
|---|
| 211 | 208 |  	(pr_reg)[1] = (regs)->r14;				\ | 
|---|
| .. | .. | 
|---|
| 228 | 225 |  	(pr_reg)[18] = (regs)->flags;				\ | 
|---|
| 229 | 226 |  	(pr_reg)[19] = (regs)->sp;				\ | 
|---|
| 230 | 227 |  	(pr_reg)[20] = (regs)->ss;				\ | 
|---|
| 231 |  | -	rdmsrl(MSR_FS_BASE, base); (pr_reg)[21] = base;		\  | 
|---|
| 232 |  | -	rdmsrl(MSR_KERNEL_GS_BASE, base); (pr_reg)[22] = base;	\  | 
|---|
 | 228 | +	(pr_reg)[21] = x86_fsbase_read_cpu();			\  | 
|---|
 | 229 | +	(pr_reg)[22] = x86_gsbase_read_cpu_inactive();		\  | 
|---|
| 233 | 230 |  	asm("movl %%ds,%0" : "=r" (v)); (pr_reg)[23] = v;	\ | 
|---|
| 234 | 231 |  	asm("movl %%es,%0" : "=r" (v)); (pr_reg)[24] = v;	\ | 
|---|
| 235 | 232 |  	asm("movl %%fs,%0" : "=r" (v)); (pr_reg)[25] = v;	\ | 
|---|
| .. | .. | 
|---|
| 282 | 279 |  /* | 
|---|
| 283 | 280 |   * An executable for which elf_read_implies_exec() returns TRUE will | 
|---|
| 284 | 281 |   * have the READ_IMPLIES_EXEC personality flag set automatically. | 
|---|
 | 282 | + *  | 
|---|
 | 283 | + * The decision process for determining the results are:  | 
|---|
 | 284 | + *  | 
|---|
 | 285 | + *                 CPU: | lacks NX*  | has NX, ia32     | has NX, x86_64 |  | 
|---|
 | 286 | + * ELF:                 |            |                  |                |  | 
|---|
 | 287 | + * ---------------------|------------|------------------|----------------|  | 
|---|
 | 288 | + * missing PT_GNU_STACK | exec-all   | exec-all         | exec-none      |  | 
|---|
 | 289 | + * PT_GNU_STACK == RWX  | exec-stack | exec-stack       | exec-stack     |  | 
|---|
 | 290 | + * PT_GNU_STACK == RW   | exec-none  | exec-none        | exec-none      |  | 
|---|
 | 291 | + *  | 
|---|
 | 292 | + *  exec-all  : all PROT_READ user mappings are executable, except when  | 
|---|
 | 293 | + *              backed by files on a noexec-filesystem.  | 
|---|
 | 294 | + *  exec-none : only PROT_EXEC user mappings are executable.  | 
|---|
 | 295 | + *  exec-stack: only the stack and PROT_EXEC user mappings are executable.  | 
|---|
 | 296 | + *  | 
|---|
 | 297 | + *  *this column has no architectural effect: NX markings are ignored by  | 
|---|
 | 298 | + *   hardware, but may have behavioral effects when "wants X" collides with  | 
|---|
 | 299 | + *   "cannot be X" constraints in memory permission flags, as in  | 
|---|
 | 300 | + *   https://lkml.kernel.org/r/20190418055759.GA3155@mellanox.com  | 
|---|
 | 301 | + *  | 
|---|
| 285 | 302 |   */ | 
|---|
| 286 | 303 |  #define elf_read_implies_exec(ex, executable_stack)	\ | 
|---|
| 287 |  | -	(executable_stack != EXSTACK_DISABLE_X)  | 
|---|
 | 304 | +	(mmap_is_ia32() && executable_stack == EXSTACK_DEFAULT)  | 
|---|
| 288 | 305 |   | 
|---|
| 289 | 306 |  struct task_struct; | 
|---|
| 290 | 307 |   | 
|---|