syscalls/x86: Wire up COMPAT_SYSCALL_DEFINE0
x86 has special handling for COMPAT_SYSCALL_DEFINEx, but there was no override for COMPAT_SYSCALL_DEFINE0. Wire it up so that we can use it for rt_sigreturn. Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Sami Tolvanen <samitolvanen@google.com> Cc: Borislav Petkov <bp@alien8.de> Cc: H . Peter Anvin <hpa@zytor.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20191008224049.115427-3-samitolvanen@google.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
8661d769ab
commit
cf3b83e19d
|
@ -28,13 +28,21 @@
|
|||
* kernel/sys_ni.c and SYS_NI in kernel/time/posix-stubs.c to cover this
|
||||
* case as well.
|
||||
*/
|
||||
#define __IA32_COMPAT_SYS_STUB0(x, name) \
|
||||
asmlinkage long __ia32_compat_sys_##name(const struct pt_regs *regs);\
|
||||
ALLOW_ERROR_INJECTION(__ia32_compat_sys_##name, ERRNO); \
|
||||
asmlinkage long __ia32_compat_sys_##name(const struct pt_regs *regs)\
|
||||
{ \
|
||||
return __se_compat_sys_##name(); \
|
||||
}
|
||||
|
||||
#define __IA32_COMPAT_SYS_STUBx(x, name, ...) \
|
||||
asmlinkage long __ia32_compat_sys##name(const struct pt_regs *regs);\
|
||||
ALLOW_ERROR_INJECTION(__ia32_compat_sys##name, ERRNO); \
|
||||
asmlinkage long __ia32_compat_sys##name(const struct pt_regs *regs)\
|
||||
{ \
|
||||
return __se_compat_sys##name(SC_IA32_REGS_TO_ARGS(x,__VA_ARGS__));\
|
||||
} \
|
||||
}
|
||||
|
||||
#define __IA32_SYS_STUBx(x, name, ...) \
|
||||
asmlinkage long __ia32_sys##name(const struct pt_regs *regs); \
|
||||
|
@ -76,15 +84,24 @@
|
|||
* of the x86-64-style parameter ordering of x32 syscalls. The syscalls common
|
||||
* with x86_64 obviously do not need such care.
|
||||
*/
|
||||
#define __X32_COMPAT_SYS_STUB0(x, name, ...) \
|
||||
asmlinkage long __x32_compat_sys_##name(const struct pt_regs *regs);\
|
||||
ALLOW_ERROR_INJECTION(__x32_compat_sys_##name, ERRNO); \
|
||||
asmlinkage long __x32_compat_sys_##name(const struct pt_regs *regs)\
|
||||
{ \
|
||||
return __se_compat_sys_##name();\
|
||||
}
|
||||
|
||||
#define __X32_COMPAT_SYS_STUBx(x, name, ...) \
|
||||
asmlinkage long __x32_compat_sys##name(const struct pt_regs *regs);\
|
||||
ALLOW_ERROR_INJECTION(__x32_compat_sys##name, ERRNO); \
|
||||
asmlinkage long __x32_compat_sys##name(const struct pt_regs *regs)\
|
||||
{ \
|
||||
return __se_compat_sys##name(SC_X86_64_REGS_TO_ARGS(x,__VA_ARGS__));\
|
||||
} \
|
||||
}
|
||||
|
||||
#else /* CONFIG_X86_X32 */
|
||||
#define __X32_COMPAT_SYS_STUB0(x, name)
|
||||
#define __X32_COMPAT_SYS_STUBx(x, name, ...)
|
||||
#endif /* CONFIG_X86_X32 */
|
||||
|
||||
|
@ -95,6 +112,17 @@
|
|||
* mapping of registers to parameters, we need to generate stubs for each
|
||||
* of them.
|
||||
*/
|
||||
#define COMPAT_SYSCALL_DEFINE0(name) \
|
||||
static long __se_compat_sys_##name(void); \
|
||||
static inline long __do_compat_sys_##name(void); \
|
||||
__IA32_COMPAT_SYS_STUB0(x, name) \
|
||||
__X32_COMPAT_SYS_STUB0(x, name) \
|
||||
static long __se_compat_sys_##name(void) \
|
||||
{ \
|
||||
return __do_compat_sys_##name(); \
|
||||
} \
|
||||
static inline long __do_compat_sys_##name(void)
|
||||
|
||||
#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \
|
||||
static long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
|
||||
static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
|
||||
|
|
Loading…
Reference in New Issue