[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200323081114.GA10796@gmail.com>
Date: Mon, 23 Mar 2020 09:11:14 +0100
From: Ingo Molnar <mingo@...nel.org>
To: Brian Gerst <brgerst@...il.com>
Cc: linux-kernel@...r.kernel.org, x86@...nel.org,
Thomas Gleixner <tglx@...utronix.de>,
Borislav Petkov <bp@...en8.de>,
"H . Peter Anvin" <hpa@...or.com>,
Andy Lutomirski <luto@...nel.org>,
Dominik Brodowski <linux@...inikbrodowski.net>
Subject: [PATCH] x86/entry: Fix SYS_NI() build failure
* Brian Gerst <brgerst@...il.com> wrote:
> Pull the common code out from the SYS_NI macros into a new __SYS_NI macro.
> Also conditionalize the X64 version in preparation for enabling syscall
> wrappers on 32-bit native kernels.
>
> Signed-off-by: Brian Gerst <brgerst@...il.com>
> Reviewed-by: Dominik Brodowski <linux@...inikbrodowski.net>
> Reviewed-by: Andy Lutomirski <luto@...nel.org>
> #define COMPAT_SYS_NI(name) \
> - SYSCALL_ALIAS(__ia32_compat_sys_##name, sys_ni_posix_timers); \
> - SYSCALL_ALIAS(__x32_compat_sys_##name, sys_ni_posix_timers)
> + __IA32_COMPAT_SYS_NI(name) \
> + __X32_COMPAT_SYS_NI(name)
>
> #endif /* CONFIG_COMPAT */
>
> @@ -231,9 +245,9 @@ struct pt_regs;
> __X64_COND_SYSCALL(name) \
> __IA32_COND_SYSCALL(name)
>
> -#ifndef SYS_NI
> -#define SYS_NI(name) SYSCALL_ALIAS(__x64_sys_##name, sys_ni_posix_timers);
> -#endif
> +#define SYS_NI(name) \
> + __X64_SYS_NI(name) \
> + __IA32_SYS_NI(name)
This breaks the x86-64 build on !CONFIG_POSIX_TIMERS (and probably also
with some x32 build variants), because of a missing ';' between
__X64_SYS_NI() and __IA32_SYS_NI().
I suspect testing didn't catch this because SYS_NI() is rarely used in
our x86-64 Kconfig space.
Very lightly tested fix attached.
I didn't see the COND_SYSCALL_COMPAT() build failure, but seems to have a
similar bug.
Thanks,
Ingo
Signed-off-by: Ingo Molnar <mingo@...nel.org>
---
arch/x86/include/asm/syscall_wrapper.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
index e10efa1454bc..8929419b9783 100644
--- a/arch/x86/include/asm/syscall_wrapper.h
+++ b/arch/x86/include/asm/syscall_wrapper.h
@@ -214,12 +214,12 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
* COND_SYSCALL_COMPAT in kernel/sys_ni.c and COMPAT_SYS_NI in
* kernel/time/posix-stubs.c to cover this case as well.
*/
-#define COND_SYSCALL_COMPAT(name) \
- __IA32_COMPAT_COND_SYSCALL(name) \
+#define COND_SYSCALL_COMPAT(name) \
+ __IA32_COMPAT_COND_SYSCALL(name); \
__X32_COMPAT_COND_SYSCALL(name)
#define COMPAT_SYS_NI(name) \
- __IA32_COMPAT_SYS_NI(name) \
+ __IA32_COMPAT_SYS_NI(name); \
__X32_COMPAT_SYS_NI(name)
#endif /* CONFIG_COMPAT */
@@ -257,7 +257,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
__IA32_COND_SYSCALL(name)
#define SYS_NI(name) \
- __X64_SYS_NI(name) \
+ __X64_SYS_NI(name); \
__IA32_SYS_NI(name)
Powered by blists - more mailing lists