It seems I accidentally switched the guard on linux/elf-fdpic.h from #ifdef __KERNEL__ to #ifndef __KERNEL__ when attempting to expand the guarded region to cover the elf_fdpic_params struct when doing the UAPI split - with the result that the struct became unavailable to kernel code. Move incorrectly guarded bits back to the kernelspace header. Whilst we're at it, the __KERNEL__ guards can be deleted as they're no longer necessary.
Showing the changes to include/uapi (1 of 2 files). Show all
Unified · Split
| @@ -9,8 +9,8 @@ · 8 unmodified lines | ||
| 9 | 9 | * 2 of the License, or (at your option) any later version. |
| 10 | 10 | */ |
| 11 | 11 | |
| 12 | −#ifndef _LINUX_ELF_FDPIC_H | |
| 13 | −#define _LINUX_ELF_FDPIC_H | |
| 12 | +#ifndef _UAPI_LINUX_ELF_FDPIC_H | |
| 13 | +#define _UAPI_LINUX_ELF_FDPIC_H | |
| 14 | 14 | |
| 15 | 15 | #include <linux/elf.h> |
| 16 | 16 | |
| @@ -31,40 +31,4 @@ struct elf32_fdpic_loadmap { · 14 unmodified lines | ||
| 31 | 31 | |
| 32 | 32 | #define ELF32_FDPIC_LOADMAP_VERSION 0x0000 |
| 33 | 33 | |
| 34 | −#ifndef __KERNEL__ | |
| 35 | −/* | |
| 36 | − * binfmt binary parameters structure | |
| 37 | − */ | |
| 38 | −struct elf_fdpic_params { | |
| 39 | − struct elfhdr hdr; /* ref copy of ELF header */ | |
| 40 | − struct elf_phdr *phdrs; /* ref copy of PT_PHDR table */ | |
| 41 | − struct elf32_fdpic_loadmap *loadmap; /* loadmap to be passed to userspace */ | |
| 42 | − unsigned long elfhdr_addr; /* mapped ELF header user address */ | |
| 43 | − unsigned long ph_addr; /* mapped PT_PHDR user address */ | |
| 44 | − unsigned long map_addr; /* mapped loadmap user address */ | |
| 45 | − unsigned long entry_addr; /* mapped entry user address */ | |
| 46 | − unsigned long stack_size; /* stack size requested (PT_GNU_STACK) */ | |
| 47 | − unsigned long dynamic_addr; /* mapped PT_DYNAMIC user address */ | |
| 48 | − unsigned long load_addr; /* user address at which to map binary */ | |
| 49 | − unsigned long flags; | |
| 50 | −#define ELF_FDPIC_FLAG_ARRANGEMENT 0x0000000f /* PT_LOAD arrangement flags */ | |
| 51 | −#define ELF_FDPIC_FLAG_INDEPENDENT 0x00000000 /* PT_LOADs can be put anywhere */ | |
| 52 | −#define ELF_FDPIC_FLAG_HONOURVADDR 0x00000001 /* PT_LOAD.vaddr must be honoured */ | |
| 53 | −#define ELF_FDPIC_FLAG_CONSTDISP 0x00000002 /* PT_LOADs require constant | |
| 54 | − * displacement */ | |
| 55 | −#define ELF_FDPIC_FLAG_CONTIGUOUS 0x00000003 /* PT_LOADs should be contiguous */ | |
| 56 | −#define ELF_FDPIC_FLAG_EXEC_STACK 0x00000010 /* T if stack to be executable */ | |
| 57 | −#define ELF_FDPIC_FLAG_NOEXEC_STACK 0x00000020 /* T if stack not to be executable */ | |
| 58 | −#define ELF_FDPIC_FLAG_EXECUTABLE 0x00000040 /* T if this object is the executable */ | |
| 59 | −#define ELF_FDPIC_FLAG_PRESENT 0x80000000 /* T if this object is present */ | |
| 60 | −}; | |
| 61 | − | |
| 62 | −#ifdef CONFIG_MMU | |
| 63 | −extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params, | |
| 64 | − struct elf_fdpic_params *interp_params, | |
| 65 | − unsigned long *start_stack, | |
| 66 | − unsigned long *start_brk); | |
| 67 | −#endif | |
| 68 | −#endif /* __KERNEL__ */ | |
| 69 | − | |
| 70 | −#endif /* _LINUX_ELF_FDPIC_H */ | |
| 34 | +#endif /* _UAPI_LINUX_ELF_FDPIC_H */ | |