mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 20:24:12 +08:00
ELF: Also pass any interpreter's file header to `arch_check_elf'
Also pass any interpreter's file header to `arch_check_elf' so that any architecture handler can have a look at it if needed. Signed-off-by: Maciej W. Rozycki <macro@imgtec.com> Acked-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Al Viro <viro@zeniv.linux.org.uk> Cc: Matthew Fortune <Matthew.Fortune@imgtec.com> Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/11478/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
90d53a91fb
commit
eb4bc076ff
@ -448,7 +448,7 @@ struct arch_elf_state {
|
||||
extern int arch_elf_pt_proc(void *ehdr, void *phdr, struct file *elf,
|
||||
bool is_interp, struct arch_elf_state *state);
|
||||
|
||||
extern int arch_check_elf(void *ehdr, bool has_interpreter,
|
||||
extern int arch_check_elf(void *ehdr, bool has_interpreter, void *interp_ehdr,
|
||||
struct arch_elf_state *state);
|
||||
|
||||
extern void mips_set_personality_fp(struct arch_elf_state *state);
|
||||
|
@ -128,7 +128,7 @@ int arch_elf_pt_proc(void *_ehdr, void *_phdr, struct file *elf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int arch_check_elf(void *_ehdr, bool has_interpreter,
|
||||
int arch_check_elf(void *_ehdr, bool has_interpreter, void *_interp_ehdr,
|
||||
struct arch_elf_state *state)
|
||||
{
|
||||
union {
|
||||
|
@ -491,6 +491,7 @@ static inline int arch_elf_pt_proc(struct elfhdr *ehdr,
|
||||
* arch_check_elf() - check an ELF executable
|
||||
* @ehdr: The main ELF header
|
||||
* @has_interp: True if the ELF has an interpreter, else false.
|
||||
* @interp_ehdr: The interpreter's ELF header
|
||||
* @state: Architecture-specific state preserved throughout the process
|
||||
* of loading the ELF.
|
||||
*
|
||||
@ -502,6 +503,7 @@ static inline int arch_elf_pt_proc(struct elfhdr *ehdr,
|
||||
* with that return code.
|
||||
*/
|
||||
static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
|
||||
struct elfhdr *interp_ehdr,
|
||||
struct arch_elf_state *state)
|
||||
{
|
||||
/* Dummy implementation, always proceed */
|
||||
@ -829,7 +831,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
||||
* still possible to return an error to the code that invoked
|
||||
* the exec syscall.
|
||||
*/
|
||||
retval = arch_check_elf(&loc->elf_ex, !!interpreter, &arch_state);
|
||||
retval = arch_check_elf(&loc->elf_ex,
|
||||
!!interpreter, &loc->interp_elf_ex,
|
||||
&arch_state);
|
||||
if (retval)
|
||||
goto out_free_dentry;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user