mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-05-19 21:53:53 +00:00
x86: hook up execveat system call
Hook up x86-64, i386 and x32 ABIs. Signed-off-by: David Drysdale <drysdale@google.com> Cc: Meredydd Luff <meredydd@senatehouse.org> Cc: Shuah Khan <shuah.kh@samsung.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Kees Cook <keescook@chromium.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Rich Felker <dalias@aerifal.cx> Cc: Christoph Hellwig <hch@infradead.org> Cc: Michael Kerrisk <mtk.manpages@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
51f39a1f0c
commit
27d6ec7ad6
7 changed files with 35 additions and 0 deletions
|
@ -35,6 +35,7 @@ int ia32_classify_syscall(unsigned syscall)
|
||||||
case __NR_socketcall:
|
case __NR_socketcall:
|
||||||
return 4;
|
return 4;
|
||||||
case __NR_execve:
|
case __NR_execve:
|
||||||
|
case __NR_execveat:
|
||||||
return 5;
|
return 5;
|
||||||
default:
|
default:
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -480,6 +480,7 @@ GLOBAL(\label)
|
||||||
PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
|
PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
|
||||||
PTREGSCALL stub32_sigreturn, sys32_sigreturn
|
PTREGSCALL stub32_sigreturn, sys32_sigreturn
|
||||||
PTREGSCALL stub32_execve, compat_sys_execve
|
PTREGSCALL stub32_execve, compat_sys_execve
|
||||||
|
PTREGSCALL stub32_execveat, compat_sys_execveat
|
||||||
PTREGSCALL stub32_fork, sys_fork
|
PTREGSCALL stub32_fork, sys_fork
|
||||||
PTREGSCALL stub32_vfork, sys_vfork
|
PTREGSCALL stub32_vfork, sys_vfork
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ int audit_classify_syscall(int abi, unsigned syscall)
|
||||||
case __NR_openat:
|
case __NR_openat:
|
||||||
return 3;
|
return 3;
|
||||||
case __NR_execve:
|
case __NR_execve:
|
||||||
|
case __NR_execveat:
|
||||||
return 5;
|
return 5;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -652,6 +652,20 @@ ENTRY(stub_execve)
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
END(stub_execve)
|
END(stub_execve)
|
||||||
|
|
||||||
|
ENTRY(stub_execveat)
|
||||||
|
CFI_STARTPROC
|
||||||
|
addq $8, %rsp
|
||||||
|
PARTIAL_FRAME 0
|
||||||
|
SAVE_REST
|
||||||
|
FIXUP_TOP_OF_STACK %r11
|
||||||
|
call sys_execveat
|
||||||
|
RESTORE_TOP_OF_STACK %r11
|
||||||
|
movq %rax,RAX(%rsp)
|
||||||
|
RESTORE_REST
|
||||||
|
jmp int_ret_from_sys_call
|
||||||
|
CFI_ENDPROC
|
||||||
|
END(stub_execveat)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sigreturn is special because it needs to restore all registers on return.
|
* sigreturn is special because it needs to restore all registers on return.
|
||||||
* This cannot be done with SYSRET, so use the IRET return path instead.
|
* This cannot be done with SYSRET, so use the IRET return path instead.
|
||||||
|
@ -697,6 +711,20 @@ ENTRY(stub_x32_execve)
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
END(stub_x32_execve)
|
END(stub_x32_execve)
|
||||||
|
|
||||||
|
ENTRY(stub_x32_execveat)
|
||||||
|
CFI_STARTPROC
|
||||||
|
addq $8, %rsp
|
||||||
|
PARTIAL_FRAME 0
|
||||||
|
SAVE_REST
|
||||||
|
FIXUP_TOP_OF_STACK %r11
|
||||||
|
call compat_sys_execveat
|
||||||
|
RESTORE_TOP_OF_STACK %r11
|
||||||
|
movq %rax,RAX(%rsp)
|
||||||
|
RESTORE_REST
|
||||||
|
jmp int_ret_from_sys_call
|
||||||
|
CFI_ENDPROC
|
||||||
|
END(stub_x32_execveat)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -364,3 +364,4 @@
|
||||||
355 i386 getrandom sys_getrandom
|
355 i386 getrandom sys_getrandom
|
||||||
356 i386 memfd_create sys_memfd_create
|
356 i386 memfd_create sys_memfd_create
|
||||||
357 i386 bpf sys_bpf
|
357 i386 bpf sys_bpf
|
||||||
|
358 i386 execveat sys_execveat stub32_execveat
|
||||||
|
|
|
@ -328,6 +328,7 @@
|
||||||
319 common memfd_create sys_memfd_create
|
319 common memfd_create sys_memfd_create
|
||||||
320 common kexec_file_load sys_kexec_file_load
|
320 common kexec_file_load sys_kexec_file_load
|
||||||
321 common bpf sys_bpf
|
321 common bpf sys_bpf
|
||||||
|
322 64 execveat stub_execveat
|
||||||
|
|
||||||
#
|
#
|
||||||
# x32-specific system call numbers start at 512 to avoid cache impact
|
# x32-specific system call numbers start at 512 to avoid cache impact
|
||||||
|
@ -366,3 +367,4 @@
|
||||||
542 x32 getsockopt compat_sys_getsockopt
|
542 x32 getsockopt compat_sys_getsockopt
|
||||||
543 x32 io_setup compat_sys_io_setup
|
543 x32 io_setup compat_sys_io_setup
|
||||||
544 x32 io_submit compat_sys_io_submit
|
544 x32 io_submit compat_sys_io_submit
|
||||||
|
545 x32 execveat stub_x32_execveat
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#define stub_fork sys_fork
|
#define stub_fork sys_fork
|
||||||
#define stub_vfork sys_vfork
|
#define stub_vfork sys_vfork
|
||||||
#define stub_execve sys_execve
|
#define stub_execve sys_execve
|
||||||
|
#define stub_execveat sys_execveat
|
||||||
#define stub_rt_sigreturn sys_rt_sigreturn
|
#define stub_rt_sigreturn sys_rt_sigreturn
|
||||||
|
|
||||||
#define __SYSCALL_COMMON(nr, sym, compat) __SYSCALL_64(nr, sym, compat)
|
#define __SYSCALL_COMMON(nr, sym, compat) __SYSCALL_64(nr, sym, compat)
|
||||||
|
|
Loading…
Add table
Reference in a new issue