Commit 27d6ec7a authored by David Drysdale's avatar David Drysdale Committed by Linus Torvalds

x86: hook up execveat system call

Hook up x86-64, i386 and x32 ABIs.
Signed-off-by: default avatarDavid 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 51f39a1f
...@@ -35,6 +35,7 @@ int ia32_classify_syscall(unsigned syscall) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment