* [PATCH 0/7] x86: fix warnings and refactor syscall code
@ 2021-03-01 13:15 Masahiro Yamada
2021-03-01 13:15 ` [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
` (6 more replies)
0 siblings, 7 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Andrew Morton, Andy Lutomirski,
Anton Ivanov, Brian Gerst, Dominik Brodowski, Geert Uytterhoeven,
Jeff Dike, Johannes Berg, Richard Weinberger, linux-um
This patch series makes a lot of cleanups.
We can remove a lot of lines.
The code diff is attractive.
Masahiro Yamada (7):
x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL()
x86/entry/x32: rename __x32_compat_sys_* to __x64_compat_sys_*
x86/syscalls: switch to generic syscalltbl.sh
x86/syscalls: stop filling syscall arrays with *_sys_ni_syscall
x86/unistd: define X32_NR_syscalls only for 64-bit kernel
x86/syscalls: use __NR_syscalls instead of __NR_syscall_max
x86/syscalls: switch to generic syscallhdr.sh
arch/um/kernel/skas/syscall.c | 2 +-
arch/x86/entry/syscall_32.c | 20 +++++------
arch/x86/entry/syscall_64.c | 17 +++-------
arch/x86/entry/syscall_x32.c | 35 ++++----------------
arch/x86/entry/syscalls/Makefile | 36 +++++++++++---------
arch/x86/entry/syscalls/syscallhdr.sh | 35 --------------------
arch/x86/entry/syscalls/syscalltbl.sh | 46 --------------------------
arch/x86/include/asm/Kbuild | 1 +
arch/x86/include/asm/syscall_wrapper.h | 11 +++---
arch/x86/include/asm/unistd.h | 8 ++---
arch/x86/um/sys_call_table_32.c | 14 +++-----
arch/x86/um/sys_call_table_64.c | 15 ++-------
12 files changed, 61 insertions(+), 179 deletions(-)
delete mode 100644 arch/x86/entry/syscalls/syscallhdr.sh
delete mode 100644 arch/x86/entry/syscalls/syscalltbl.sh
--
2.27.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL()
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
2021-03-25 11:48 ` Mickaël Salaün
2021-03-25 15:27 ` [tip: x86/cleanups] x86/syscalls: Fix " tip-bot2 for Masahiro Yamada
2021-03-01 13:15 ` [PATCH 2/7] x86/entry/x32: rename __x32_compat_sys_* to __x64_compat_sys_* Masahiro Yamada
` (5 subsequent siblings)
6 siblings, 2 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Mickaël Salaün,
Andy Lutomirski, Brian Gerst, Dominik Brodowski
Building kernel/sys_ni.c with W=1 emits tons of -Wmissing-prototypes
warnings.
$ make W=1 kernel/sys_ni.o
[ snip ]
CC kernel/sys_ni.o
In file included from kernel/sys_ni.c:10:
./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__x64_sys_io_setup' [-Wmissing-prototypes]
83 | __weak long __##abi##_##name(const struct pt_regs *__unused) \
| ^~
./arch/x86/include/asm/syscall_wrapper.h:100:2: note: in expansion of macro '__COND_SYSCALL'
100 | __COND_SYSCALL(x64, sys_##name)
| ^~~~~~~~~~~~~~
./arch/x86/include/asm/syscall_wrapper.h:256:2: note: in expansion of macro '__X64_COND_SYSCALL'
256 | __X64_COND_SYSCALL(name) \
| ^~~~~~~~~~~~~~~~~~
kernel/sys_ni.c:39:1: note: in expansion of macro 'COND_SYSCALL'
39 | COND_SYSCALL(io_setup);
| ^~~~~~~~~~~~
./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__ia32_sys_io_setup' [-Wmissing-prototypes]
83 | __weak long __##abi##_##name(const struct pt_regs *__unused) \
| ^~
./arch/x86/include/asm/syscall_wrapper.h:120:2: note: in expansion of macro '__COND_SYSCALL'
120 | __COND_SYSCALL(ia32, sys_##name)
| ^~~~~~~~~~~~~~
./arch/x86/include/asm/syscall_wrapper.h:257:2: note: in expansion of macro '__IA32_COND_SYSCALL'
257 | __IA32_COND_SYSCALL(name)
| ^~~~~~~~~~~~~~~~~~~
kernel/sys_ni.c:39:1: note: in expansion of macro 'COND_SYSCALL'
39 | COND_SYSCALL(io_setup);
| ^~~~~~~~~~~~
...
__SYS_STUB0() and __SYS_STUBx() defined a few lines above have forward
declarations. Let's do likewise for __COND_SYSCALL() to fix the
warnings.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Tested-by: Mickaël Salaün <mic@linux.microsoft.com>
---
arch/x86/include/asm/syscall_wrapper.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
index a84333adeef2..80c08c7d5e72 100644
--- a/arch/x86/include/asm/syscall_wrapper.h
+++ b/arch/x86/include/asm/syscall_wrapper.h
@@ -80,6 +80,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
}
#define __COND_SYSCALL(abi, name) \
+ __weak long __##abi##_##name(const struct pt_regs *__unused); \
__weak long __##abi##_##name(const struct pt_regs *__unused) \
{ \
return sys_ni_syscall(); \
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/7] x86/entry/x32: rename __x32_compat_sys_* to __x64_compat_sys_*
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
2021-03-01 13:15 ` [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
2021-03-01 13:15 ` [PATCH 3/7] x86/syscalls: switch to generic syscalltbl.sh Masahiro Yamada
` (4 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Andy Lutomirski, Brian Gerst,
Dominik Brodowski
In arch/x86/entry/syscall_x32.c, the macros are mapped to symbols
as follows:
__SYSCALL_COMMON(nr, sym) --> __x64_<sym>
__SYSCALL_X32(nr, sym) --> __x32_<sym>
Originally, the syscalls in the x32 special range (512-547) were all
compat.
This assumption is now broken after the following commits:
55db9c0e8534 ("net: remove compat_sys_{get,set}sockopt")
5f764d624a89 ("fs: remove the compat readv/writev syscalls")
598b3cec831f ("fs: remove compat_sys_vmsplice")
c3973b401ef2 ("mm: remove compat_process_vm_{readv,writev}")
Those commits redefined __x32_sys_* to __x64_sys_* because there is
no stub like __x32_sys_*.
I think defining as follows is more sensible and cleaner.
__SYSCALL_COMMON(nr, sym) --> __x64_<sym>
__SYSCALL_X32(nr, sym) --> __x64_<sym>
This works because both x86_64 and x32 use the same ABI
(RDI, RSI, RDX, R10, R8, R9)
The ugly #define __x32_sys_* will go away.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
arch/x86/entry/syscall_x32.c | 16 ++--------------
arch/x86/include/asm/syscall_wrapper.h | 10 +++++-----
2 files changed, 7 insertions(+), 19 deletions(-)
diff --git a/arch/x86/entry/syscall_x32.c b/arch/x86/entry/syscall_x32.c
index f2fe0a33bcfd..3fea8fb9cd6a 100644
--- a/arch/x86/entry/syscall_x32.c
+++ b/arch/x86/entry/syscall_x32.c
@@ -8,27 +8,15 @@
#include <asm/unistd.h>
#include <asm/syscall.h>
-/*
- * Reuse the 64-bit entry points for the x32 versions that occupy different
- * slots in the syscall table.
- */
-#define __x32_sys_readv __x64_sys_readv
-#define __x32_sys_writev __x64_sys_writev
-#define __x32_sys_getsockopt __x64_sys_getsockopt
-#define __x32_sys_setsockopt __x64_sys_setsockopt
-#define __x32_sys_vmsplice __x64_sys_vmsplice
-#define __x32_sys_process_vm_readv __x64_sys_process_vm_readv
-#define __x32_sys_process_vm_writev __x64_sys_process_vm_writev
-
#define __SYSCALL_64(nr, sym)
-#define __SYSCALL_X32(nr, sym) extern long __x32_##sym(const struct pt_regs *);
+#define __SYSCALL_X32(nr, sym) extern long __x64_##sym(const struct pt_regs *);
#define __SYSCALL_COMMON(nr, sym) extern long __x64_##sym(const struct pt_regs *);
#include <asm/syscalls_64.h>
#undef __SYSCALL_X32
#undef __SYSCALL_COMMON
-#define __SYSCALL_X32(nr, sym) [nr] = __x32_##sym,
+#define __SYSCALL_X32(nr, sym) [nr] = __x64_##sym,
#define __SYSCALL_COMMON(nr, sym) [nr] = __x64_##sym,
asmlinkage const sys_call_ptr_t x32_sys_call_table[__NR_x32_syscall_max+1] = {
diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
index 80c08c7d5e72..6a2827d0681f 100644
--- a/arch/x86/include/asm/syscall_wrapper.h
+++ b/arch/x86/include/asm/syscall_wrapper.h
@@ -17,7 +17,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
* __x64_sys_*() - 64-bit native syscall
* __ia32_sys_*() - 32-bit native syscall or common compat syscall
* __ia32_compat_sys_*() - 32-bit compat syscall
- * __x32_compat_sys_*() - 64-bit X32 compat syscall
+ * __x64_compat_sys_*() - 64-bit X32 compat syscall
*
* The registers are decoded according to the ABI:
* 64-bit: RDI, RSI, RDX, R10, R8, R9
@@ -166,17 +166,17 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
* with x86_64 obviously do not need such care.
*/
#define __X32_COMPAT_SYS_STUB0(name) \
- __SYS_STUB0(x32, compat_sys_##name)
+ __SYS_STUB0(x64, compat_sys_##name)
#define __X32_COMPAT_SYS_STUBx(x, name, ...) \
- __SYS_STUBx(x32, compat_sys##name, \
+ __SYS_STUBx(x64, compat_sys##name, \
SC_X86_64_REGS_TO_ARGS(x, __VA_ARGS__))
#define __X32_COMPAT_COND_SYSCALL(name) \
- __COND_SYSCALL(x32, compat_sys_##name)
+ __COND_SYSCALL(x64, compat_sys_##name)
#define __X32_COMPAT_SYS_NI(name) \
- __SYS_NI(x32, compat_sys_##name)
+ __SYS_NI(x64, compat_sys_##name)
#else /* CONFIG_X86_X32 */
#define __X32_COMPAT_SYS_STUB0(name)
#define __X32_COMPAT_SYS_STUBx(x, name, ...)
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/7] x86/syscalls: switch to generic syscalltbl.sh
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
2021-03-01 13:15 ` [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
2021-03-01 13:15 ` [PATCH 2/7] x86/entry/x32: rename __x32_compat_sys_* to __x64_compat_sys_* Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
2021-03-01 13:15 ` [PATCH 4/7] x86/syscalls: stop filling syscall arrays with *_sys_ni_syscall Masahiro Yamada
` (3 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Andrew Morton, Andy Lutomirski,
Anton Ivanov, Brian Gerst, Dominik Brodowski, Geert Uytterhoeven,
Jeff Dike, Richard Weinberger, linux-um
Many architectures duplicate similar shell scripts.
This commit converts x86 and UML to use scripts/syscalltbl.sh.
Currently, syscall_64.h mixes up x86_64 and x32 syscalls. This commit
splits it into syscall_64.h and syscall_x32.h.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
arch/x86/entry/syscall_32.c | 12 +++++--
arch/x86/entry/syscall_64.c | 9 ++----
arch/x86/entry/syscall_x32.c | 15 +++------
arch/x86/entry/syscalls/Makefile | 10 ++++--
arch/x86/entry/syscalls/syscalltbl.sh | 46 ---------------------------
arch/x86/include/asm/Kbuild | 1 +
arch/x86/um/sys_call_table_32.c | 8 +++--
arch/x86/um/sys_call_table_64.c | 9 ++----
8 files changed, 34 insertions(+), 76 deletions(-)
delete mode 100644 arch/x86/entry/syscalls/syscalltbl.sh
diff --git a/arch/x86/entry/syscall_32.c b/arch/x86/entry/syscall_32.c
index 86eb0d89d46f..70bf46e73b1c 100644
--- a/arch/x86/entry/syscall_32.c
+++ b/arch/x86/entry/syscall_32.c
@@ -8,12 +8,18 @@
#include <asm/unistd.h>
#include <asm/syscall.h>
-#define __SYSCALL_I386(nr, sym) extern long __ia32_##sym(const struct pt_regs *);
+#ifdef CONFIG_IA32_EMULATION
+#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat)
+#else
+#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)
+#endif
+
+#define __SYSCALL(nr, sym) extern long __ia32_##sym(const struct pt_regs *);
#include <asm/syscalls_32.h>
-#undef __SYSCALL_I386
+#undef __SYSCALL
-#define __SYSCALL_I386(nr, sym) [nr] = __ia32_##sym,
+#define __SYSCALL(nr, sym) [nr] = __ia32_##sym,
__visible const sys_call_ptr_t ia32_sys_call_table[__NR_ia32_syscall_max+1] = {
/*
diff --git a/arch/x86/entry/syscall_64.c b/arch/x86/entry/syscall_64.c
index 1594ec72bcbb..82670bb10931 100644
--- a/arch/x86/entry/syscall_64.c
+++ b/arch/x86/entry/syscall_64.c
@@ -8,14 +8,11 @@
#include <asm/unistd.h>
#include <asm/syscall.h>
-#define __SYSCALL_X32(nr, sym)
-#define __SYSCALL_COMMON(nr, sym) __SYSCALL_64(nr, sym)
-
-#define __SYSCALL_64(nr, sym) extern long __x64_##sym(const struct pt_regs *);
+#define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
#include <asm/syscalls_64.h>
-#undef __SYSCALL_64
+#undef __SYSCALL
-#define __SYSCALL_64(nr, sym) [nr] = __x64_##sym,
+#define __SYSCALL(nr, sym) [nr] = __x64_##sym,
asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
/*
diff --git a/arch/x86/entry/syscall_x32.c b/arch/x86/entry/syscall_x32.c
index 3fea8fb9cd6a..6d2ef887d7b6 100644
--- a/arch/x86/entry/syscall_x32.c
+++ b/arch/x86/entry/syscall_x32.c
@@ -8,16 +8,11 @@
#include <asm/unistd.h>
#include <asm/syscall.h>
-#define __SYSCALL_64(nr, sym)
+#define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
+#include <asm/syscalls_x32.h>
+#undef __SYSCALL
-#define __SYSCALL_X32(nr, sym) extern long __x64_##sym(const struct pt_regs *);
-#define __SYSCALL_COMMON(nr, sym) extern long __x64_##sym(const struct pt_regs *);
-#include <asm/syscalls_64.h>
-#undef __SYSCALL_X32
-#undef __SYSCALL_COMMON
-
-#define __SYSCALL_X32(nr, sym) [nr] = __x64_##sym,
-#define __SYSCALL_COMMON(nr, sym) [nr] = __x64_##sym,
+#define __SYSCALL(nr, sym) [nr] = __x64_##sym,
asmlinkage const sys_call_ptr_t x32_sys_call_table[__NR_x32_syscall_max+1] = {
/*
@@ -25,5 +20,5 @@ asmlinkage const sys_call_ptr_t x32_sys_call_table[__NR_x32_syscall_max+1] = {
* when the & below is removed.
*/
[0 ... __NR_x32_syscall_max] = &__x64_sys_ni_syscall,
-#include <asm/syscalls_64.h>
+#include <asm/syscalls_x32.h>
};
diff --git a/arch/x86/entry/syscalls/Makefile b/arch/x86/entry/syscalls/Makefile
index d8c4f6c9eadc..c4bd8dd82bb1 100644
--- a/arch/x86/entry/syscalls/Makefile
+++ b/arch/x86/entry/syscalls/Makefile
@@ -10,7 +10,7 @@ syscall32 := $(src)/syscall_32.tbl
syscall64 := $(src)/syscall_64.tbl
syshdr := $(srctree)/$(src)/syscallhdr.sh
-systbl := $(srctree)/$(src)/syscalltbl.sh
+systbl := $(srctree)/scripts/syscalltbl.sh
quiet_cmd_syshdr = SYSHDR $@
cmd_syshdr = $(CONFIG_SHELL) '$(syshdr)' '$<' '$@' \
@@ -18,7 +18,7 @@ quiet_cmd_syshdr = SYSHDR $@
'$(syshdr_pfx_$(basetarget))' \
'$(syshdr_offset_$(basetarget))'
quiet_cmd_systbl = SYSTBL $@
- cmd_systbl = $(CONFIG_SHELL) '$(systbl)' $< $@
+ cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis) $< $@
quiet_cmd_hypercalls = HYPERCALLS $@
cmd_hypercalls = $(CONFIG_SHELL) '$<' $@ $(filter-out $<, $(real-prereqs))
@@ -46,10 +46,15 @@ syshdr_pfx_unistd_64_x32 := x32_
$(out)/unistd_64_x32.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
+$(out)/syscalls_32.h: abis := i386
$(out)/syscalls_32.h: $(syscall32) $(systbl) FORCE
$(call if_changed,systbl)
+$(out)/syscalls_64.h: abis := common,64
$(out)/syscalls_64.h: $(syscall64) $(systbl) FORCE
$(call if_changed,systbl)
+$(out)/syscalls_x32.h: abis := common,x32
+$(out)/syscalls_x32.h: $(syscall64) $(systbl) FORCE
+ $(call if_changed,systbl)
$(out)/xen-hypercalls.h: $(srctree)/scripts/xen-hypercalls.sh FORCE
$(call if_changed,hypercalls)
@@ -60,6 +65,7 @@ uapisyshdr-y += unistd_32.h unistd_64.h unistd_x32.h
syshdr-y += syscalls_32.h
syshdr-$(CONFIG_X86_64) += unistd_32_ia32.h unistd_64_x32.h
syshdr-$(CONFIG_X86_64) += syscalls_64.h
+syshdr-$(CONFIG_X86_X32) += syscalls_x32.h
syshdr-$(CONFIG_XEN) += xen-hypercalls.h
uapisyshdr-y := $(addprefix $(uapi)/, $(uapisyshdr-y))
diff --git a/arch/x86/entry/syscalls/syscalltbl.sh b/arch/x86/entry/syscalls/syscalltbl.sh
deleted file mode 100644
index 929bde120d6b..000000000000
--- a/arch/x86/entry/syscalls/syscalltbl.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: GPL-2.0
-
-in="$1"
-out="$2"
-
-syscall_macro() {
- local abi="$1"
- local nr="$2"
- local entry="$3"
-
- echo "__SYSCALL_${abi}($nr, $entry)"
-}
-
-emit() {
- local abi="$1"
- local nr="$2"
- local entry="$3"
- local compat="$4"
-
- if [ "$abi" != "I386" -a -n "$compat" ]; then
- echo "a compat entry ($abi: $compat) for a 64-bit syscall makes no sense" >&2
- exit 1
- fi
-
- if [ -z "$compat" ]; then
- if [ -n "$entry" ]; then
- syscall_macro "$abi" "$nr" "$entry"
- fi
- else
- echo "#ifdef CONFIG_X86_32"
- if [ -n "$entry" ]; then
- syscall_macro "$abi" "$nr" "$entry"
- fi
- echo "#else"
- syscall_macro "$abi" "$nr" "$compat"
- echo "#endif"
- fi
-}
-
-grep '^[0-9]' "$in" | sort -n | (
- while read nr abi name entry compat; do
- abi=`echo "$abi" | tr '[a-z]' '[A-Z]'`
- emit "$abi" "$nr" "$entry" "$compat"
- done
-) > "$out"
diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild
index b19ec8282d50..1e51650b79d7 100644
--- a/arch/x86/include/asm/Kbuild
+++ b/arch/x86/include/asm/Kbuild
@@ -3,6 +3,7 @@
generated-y += syscalls_32.h
generated-y += syscalls_64.h
+generated-y += syscalls_x32.h
generated-y += unistd_32_ia32.h
generated-y += unistd_64_x32.h
generated-y += xen-hypercalls.h
diff --git a/arch/x86/um/sys_call_table_32.c b/arch/x86/um/sys_call_table_32.c
index 2ed81e581755..e83619c365dc 100644
--- a/arch/x86/um/sys_call_table_32.c
+++ b/arch/x86/um/sys_call_table_32.c
@@ -26,11 +26,13 @@
#define old_mmap sys_old_mmap
-#define __SYSCALL_I386(nr, sym) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) ;
+#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)
+
+#define __SYSCALL(nr, sym) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
#include <asm/syscalls_32.h>
-#undef __SYSCALL_I386
-#define __SYSCALL_I386(nr, sym) [ nr ] = sym,
+#undef __SYSCALL
+#define __SYSCALL(nr, sym) [ nr ] = sym,
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
diff --git a/arch/x86/um/sys_call_table_64.c b/arch/x86/um/sys_call_table_64.c
index 2e8544dafbb0..6fb75af7cf54 100644
--- a/arch/x86/um/sys_call_table_64.c
+++ b/arch/x86/um/sys_call_table_64.c
@@ -36,14 +36,11 @@
#define stub_execveat sys_execveat
#define stub_rt_sigreturn sys_rt_sigreturn
-#define __SYSCALL_X32(nr, sym)
-#define __SYSCALL_COMMON(nr, sym) __SYSCALL_64(nr, sym)
-
-#define __SYSCALL_64(nr, sym) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) ;
+#define __SYSCALL(nr, sym) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
#include <asm/syscalls_64.h>
-#undef __SYSCALL_64
-#define __SYSCALL_64(nr, sym) [ nr ] = sym,
+#undef __SYSCALL
+#define __SYSCALL(nr, sym) [ nr ] = sym,
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/7] x86/syscalls: stop filling syscall arrays with *_sys_ni_syscall
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
` (2 preceding siblings ...)
2021-03-01 13:15 ` [PATCH 3/7] x86/syscalls: switch to generic syscalltbl.sh Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
2021-03-01 13:15 ` [PATCH 5/7] x86/unistd: define X32_NR_syscalls only for 64-bit kernel Masahiro Yamada
` (2 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Andy Lutomirski, Anton Ivanov,
Jeff Dike, Richard Weinberger, linux-um
This is a follow-up cleanup after switching to the generic
syscalltbl.sh.
The old arch/x86/entry/syscalls/syscalltbl.sh skipped non-existing
syscalls. So, the generated syscalls_64.h, for example, had a big
hole in the syscall numbers 335-423 range. That is why there exists
[0 ... __NR_*_syscall_max] = &__*_sys_ni_cyscall.
The new script, scripts/syscalltbl.sh automatically fills holes
with __SYSCALL(<nr>, sys_ni_syscall), hence such ugly code can
go away. The designated initializers, '[nr] =' are also unneeded.
Also, there is no need to give __NR_*_syscall_max+1 because the array
size is implied by the number of syscalls in the generated headers.
Hence, there is no need to include <asm/unistd.h>, either.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
arch/x86/entry/syscall_32.c | 10 ++--------
arch/x86/entry/syscall_64.c | 10 ++--------
arch/x86/entry/syscall_x32.c | 10 ++--------
arch/x86/um/sys_call_table_32.c | 6 ------
arch/x86/um/sys_call_table_64.c | 6 ------
5 files changed, 6 insertions(+), 36 deletions(-)
diff --git a/arch/x86/entry/syscall_32.c b/arch/x86/entry/syscall_32.c
index 70bf46e73b1c..8cfc9bc73e7f 100644
--- a/arch/x86/entry/syscall_32.c
+++ b/arch/x86/entry/syscall_32.c
@@ -5,7 +5,6 @@
#include <linux/sys.h>
#include <linux/cache.h>
#include <linux/syscalls.h>
-#include <asm/unistd.h>
#include <asm/syscall.h>
#ifdef CONFIG_IA32_EMULATION
@@ -19,13 +18,8 @@
#include <asm/syscalls_32.h>
#undef __SYSCALL
-#define __SYSCALL(nr, sym) [nr] = __ia32_##sym,
+#define __SYSCALL(nr, sym) __ia32_##sym,
-__visible const sys_call_ptr_t ia32_sys_call_table[__NR_ia32_syscall_max+1] = {
- /*
- * Smells like a compiler bug -- it doesn't work
- * when the & below is removed.
- */
- [0 ... __NR_ia32_syscall_max] = &__ia32_sys_ni_syscall,
+__visible const sys_call_ptr_t ia32_sys_call_table[] = {
#include <asm/syscalls_32.h>
};
diff --git a/arch/x86/entry/syscall_64.c b/arch/x86/entry/syscall_64.c
index 82670bb10931..be120eec1fc9 100644
--- a/arch/x86/entry/syscall_64.c
+++ b/arch/x86/entry/syscall_64.c
@@ -5,20 +5,14 @@
#include <linux/sys.h>
#include <linux/cache.h>
#include <linux/syscalls.h>
-#include <asm/unistd.h>
#include <asm/syscall.h>
#define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
#include <asm/syscalls_64.h>
#undef __SYSCALL
-#define __SYSCALL(nr, sym) [nr] = __x64_##sym,
+#define __SYSCALL(nr, sym) __x64_##sym,
-asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
- /*
- * Smells like a compiler bug -- it doesn't work
- * when the & below is removed.
- */
- [0 ... __NR_syscall_max] = &__x64_sys_ni_syscall,
+asmlinkage const sys_call_ptr_t sys_call_table[] = {
#include <asm/syscalls_64.h>
};
diff --git a/arch/x86/entry/syscall_x32.c b/arch/x86/entry/syscall_x32.c
index 6d2ef887d7b6..bdd0e03a1265 100644
--- a/arch/x86/entry/syscall_x32.c
+++ b/arch/x86/entry/syscall_x32.c
@@ -5,20 +5,14 @@
#include <linux/sys.h>
#include <linux/cache.h>
#include <linux/syscalls.h>
-#include <asm/unistd.h>
#include <asm/syscall.h>
#define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
#include <asm/syscalls_x32.h>
#undef __SYSCALL
-#define __SYSCALL(nr, sym) [nr] = __x64_##sym,
+#define __SYSCALL(nr, sym) __x64_##sym,
-asmlinkage const sys_call_ptr_t x32_sys_call_table[__NR_x32_syscall_max+1] = {
- /*
- * Smells like a compiler bug -- it doesn't work
- * when the & below is removed.
- */
- [0 ... __NR_x32_syscall_max] = &__x64_sys_ni_syscall,
+asmlinkage const sys_call_ptr_t x32_sys_call_table[] = {
#include <asm/syscalls_x32.h>
};
diff --git a/arch/x86/um/sys_call_table_32.c b/arch/x86/um/sys_call_table_32.c
index e83619c365dc..f8323104e353 100644
--- a/arch/x86/um/sys_call_table_32.c
+++ b/arch/x86/um/sys_call_table_32.c
@@ -7,7 +7,6 @@
#include <linux/linkage.h>
#include <linux/sys.h>
#include <linux/cache.h>
-#include <asm/unistd.h>
#include <asm/syscall.h>
#define __NO_STUBS
@@ -37,11 +36,6 @@
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
const sys_call_ptr_t sys_call_table[] ____cacheline_aligned = {
- /*
- * Smells like a compiler bug -- it doesn't work
- * when the & below is removed.
- */
- [0 ... __NR_syscall_max] = &sys_ni_syscall,
#include <asm/syscalls_32.h>
};
diff --git a/arch/x86/um/sys_call_table_64.c b/arch/x86/um/sys_call_table_64.c
index 6fb75af7cf54..5ed665dc785f 100644
--- a/arch/x86/um/sys_call_table_64.c
+++ b/arch/x86/um/sys_call_table_64.c
@@ -7,7 +7,6 @@
#include <linux/linkage.h>
#include <linux/sys.h>
#include <linux/cache.h>
-#include <asm/unistd.h>
#include <asm/syscall.h>
#define __NO_STUBS
@@ -45,11 +44,6 @@
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
const sys_call_ptr_t sys_call_table[] ____cacheline_aligned = {
- /*
- * Smells like a compiler bug -- it doesn't work
- * when the & below is removed.
- */
- [0 ... __NR_syscall_max] = &sys_ni_syscall,
#include <asm/syscalls_64.h>
};
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/7] x86/unistd: define X32_NR_syscalls only for 64-bit kernel
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
` (3 preceding siblings ...)
2021-03-01 13:15 ` [PATCH 4/7] x86/syscalls: stop filling syscall arrays with *_sys_ni_syscall Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
2021-03-01 13:15 ` [PATCH 6/7] x86/syscalls: use __NR_syscalls instead of __NR_syscall_max Masahiro Yamada
2021-03-01 13:15 ` [PATCH 7/7] x86/syscalls: switch to generic syscallhdr.sh Masahiro Yamada
6 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Brian Gerst
X32_NR_syscalls is needed only when building arch/x86/entry/common.c
for x86_64 kernel. It is not used for i386 kernel.
Move it to the else part of #ifdef CONFIG_X86_32.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
arch/x86/include/asm/unistd.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/unistd.h b/arch/x86/include/asm/unistd.h
index c1c3d31b15c0..1bc6020bc58d 100644
--- a/arch/x86/include/asm/unistd.h
+++ b/arch/x86/include/asm/unistd.h
@@ -26,11 +26,11 @@
# define __ARCH_WANT_COMPAT_SYS_PWRITEV64
# define __ARCH_WANT_COMPAT_SYS_PREADV64V2
# define __ARCH_WANT_COMPAT_SYS_PWRITEV64V2
+# define X32_NR_syscalls (__NR_x32_syscall_max + 1)
# endif
# define NR_syscalls (__NR_syscall_max + 1)
-# define X32_NR_syscalls (__NR_x32_syscall_max + 1)
# define IA32_NR_syscalls (__NR_ia32_syscall_max + 1)
# define __ARCH_WANT_NEW_STAT
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 6/7] x86/syscalls: use __NR_syscalls instead of __NR_syscall_max
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
` (4 preceding siblings ...)
2021-03-01 13:15 ` [PATCH 5/7] x86/unistd: define X32_NR_syscalls only for 64-bit kernel Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
2021-03-01 13:15 ` [PATCH 7/7] x86/syscalls: switch to generic syscallhdr.sh Masahiro Yamada
6 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Andy Lutomirski, Anton Ivanov,
Brian Gerst, Jeff Dike, Johannes Berg, Richard Weinberger,
linux-um
__NR_syscall_max is only used by x86 and UML in the following two files:
- arch/um/kernel/skas/syscall.c
- arch/x86/include/asm/unistd.h
In contrast, __NR_syscalls is widely used by all the architectures.
Let's convert __NR_syscall_max to __NR_syscalls by adding one.
This makes arch/x86/include/asm/unistd.h look cleaner, and also
prepares x86 to switch to the generic scripts/syscallhdr.sh from
arch/x86/entry/syscalls/syscallhdr.sh.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
arch/um/kernel/skas/syscall.c | 2 +-
arch/x86/entry/syscalls/syscallhdr.sh | 2 +-
arch/x86/include/asm/unistd.h | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/arch/um/kernel/skas/syscall.c b/arch/um/kernel/skas/syscall.c
index 3d91f89fd852..9ee19e566da3 100644
--- a/arch/um/kernel/skas/syscall.c
+++ b/arch/um/kernel/skas/syscall.c
@@ -41,7 +41,7 @@ void handle_syscall(struct uml_pt_regs *r)
goto out;
syscall = UPT_SYSCALL_NR(r);
- if (syscall >= 0 && syscall <= __NR_syscall_max)
+ if (syscall >= 0 && syscall < __NR_syscalls)
PT_REGS_SET_SYSCALL_RETURN(regs,
EXECUTE_SYSCALL(syscall, regs));
diff --git a/arch/x86/entry/syscalls/syscallhdr.sh b/arch/x86/entry/syscalls/syscallhdr.sh
index cc1e63857427..75e66af06773 100644
--- a/arch/x86/entry/syscalls/syscallhdr.sh
+++ b/arch/x86/entry/syscalls/syscallhdr.sh
@@ -28,7 +28,7 @@ grep -E "^[0-9A-Fa-fXx]+[[:space:]]+${my_abis}" "$in" | sort -n | (
echo ""
echo "#ifdef __KERNEL__"
- echo "#define __NR_${prefix}syscall_max $max"
+ echo "#define __NR_${prefix}syscalls $(($max + 1))"
echo "#endif"
echo ""
echo "#endif /* ${fileguard} */"
diff --git a/arch/x86/include/asm/unistd.h b/arch/x86/include/asm/unistd.h
index 1bc6020bc58d..80e9d5206a71 100644
--- a/arch/x86/include/asm/unistd.h
+++ b/arch/x86/include/asm/unistd.h
@@ -13,7 +13,7 @@
# define __ARCH_WANT_SYS_OLD_MMAP
# define __ARCH_WANT_SYS_OLD_SELECT
-# define __NR_ia32_syscall_max __NR_syscall_max
+# define IA32_NR_syscalls (__NR_syscalls)
# else
@@ -26,12 +26,12 @@
# define __ARCH_WANT_COMPAT_SYS_PWRITEV64
# define __ARCH_WANT_COMPAT_SYS_PREADV64V2
# define __ARCH_WANT_COMPAT_SYS_PWRITEV64V2
-# define X32_NR_syscalls (__NR_x32_syscall_max + 1)
+# define X32_NR_syscalls (__NR_x32_syscalls)
+# define IA32_NR_syscalls (__NR_ia32_syscalls)
# endif
-# define NR_syscalls (__NR_syscall_max + 1)
-# define IA32_NR_syscalls (__NR_ia32_syscall_max + 1)
+# define NR_syscalls (__NR_syscalls)
# define __ARCH_WANT_NEW_STAT
# define __ARCH_WANT_OLD_READDIR
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 7/7] x86/syscalls: switch to generic syscallhdr.sh
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
` (5 preceding siblings ...)
2021-03-01 13:15 ` [PATCH 6/7] x86/syscalls: use __NR_syscalls instead of __NR_syscall_max Masahiro Yamada
@ 2021-03-01 13:15 ` Masahiro Yamada
6 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-01 13:15 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, x86, H . Peter Anvin
Cc: linux-kernel, Masahiro Yamada, Andy Lutomirski, Brian Gerst,
Geert Uytterhoeven
Many architectures duplicate similar shell scripts.
This commit converts x86 to use scripts/syscallhdr.sh.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
arch/x86/entry/syscalls/Makefile | 26 ++++++++++----------
arch/x86/entry/syscalls/syscallhdr.sh | 35 ---------------------------
2 files changed, 13 insertions(+), 48 deletions(-)
delete mode 100644 arch/x86/entry/syscalls/syscallhdr.sh
diff --git a/arch/x86/entry/syscalls/Makefile b/arch/x86/entry/syscalls/Makefile
index c4bd8dd82bb1..8eb014bca8c9 100644
--- a/arch/x86/entry/syscalls/Makefile
+++ b/arch/x86/entry/syscalls/Makefile
@@ -9,40 +9,40 @@ _dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') \
syscall32 := $(src)/syscall_32.tbl
syscall64 := $(src)/syscall_64.tbl
-syshdr := $(srctree)/$(src)/syscallhdr.sh
+syshdr := $(srctree)/scripts/syscallhdr.sh
systbl := $(srctree)/scripts/syscalltbl.sh
quiet_cmd_syshdr = SYSHDR $@
- cmd_syshdr = $(CONFIG_SHELL) '$(syshdr)' '$<' '$@' \
- '$(syshdr_abi_$(basetarget))' \
- '$(syshdr_pfx_$(basetarget))' \
- '$(syshdr_offset_$(basetarget))'
+ cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --abis $(abis) --emit-nr \
+ $(if $(offset),--offset $(offset)) \
+ $(if $(prefix),--prefix $(prefix)) \
+ $< $@
quiet_cmd_systbl = SYSTBL $@
cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis) $< $@
quiet_cmd_hypercalls = HYPERCALLS $@
cmd_hypercalls = $(CONFIG_SHELL) '$<' $@ $(filter-out $<, $(real-prereqs))
-syshdr_abi_unistd_32 := i386
+$(uapi)/unistd_32.h: abis := i386
$(uapi)/unistd_32.h: $(syscall32) $(syshdr) FORCE
$(call if_changed,syshdr)
-syshdr_abi_unistd_32_ia32 := i386
-syshdr_pfx_unistd_32_ia32 := ia32_
+$(out)/unistd_32_ia32.h: abis := i386
+$(out)/unistd_32_ia32.h: prefix := ia32_
$(out)/unistd_32_ia32.h: $(syscall32) $(syshdr) FORCE
$(call if_changed,syshdr)
-syshdr_abi_unistd_x32 := common,x32
-syshdr_offset_unistd_x32 := __X32_SYSCALL_BIT
+$(uapi)/unistd_x32.h: abis := common,x32
+$(uapi)/unistd_x32.h: offset := __X32_SYSCALL_BIT
$(uapi)/unistd_x32.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
-syshdr_abi_unistd_64 := common,64
+$(uapi)/unistd_64.h: abis := common,64
$(uapi)/unistd_64.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
-syshdr_abi_unistd_64_x32 := x32
-syshdr_pfx_unistd_64_x32 := x32_
+$(out)/unistd_64_x32.h: abis := x32
+$(out)/unistd_64_x32.h: prefix := x32_
$(out)/unistd_64_x32.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
diff --git a/arch/x86/entry/syscalls/syscallhdr.sh b/arch/x86/entry/syscalls/syscallhdr.sh
deleted file mode 100644
index 75e66af06773..000000000000
--- a/arch/x86/entry/syscalls/syscallhdr.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: GPL-2.0
-
-in="$1"
-out="$2"
-my_abis=`echo "($3)" | tr ',' '|'`
-prefix="$4"
-offset="$5"
-
-fileguard=_ASM_X86_`basename "$out" | sed \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
- -e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g'`
-grep -E "^[0-9A-Fa-fXx]+[[:space:]]+${my_abis}" "$in" | sort -n | (
- echo "#ifndef ${fileguard}"
- echo "#define ${fileguard} 1"
- echo ""
-
- max=0
- while read nr abi name entry ; do
- if [ -z "$offset" ]; then
- echo "#define __NR_${prefix}${name} $nr"
- else
- echo "#define __NR_${prefix}${name} ($offset + $nr)"
- fi
-
- max=$nr
- done
-
- echo ""
- echo "#ifdef __KERNEL__"
- echo "#define __NR_${prefix}syscalls $(($max + 1))"
- echo "#endif"
- echo ""
- echo "#endif /* ${fileguard} */"
-) > "$out"
--
2.27.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL()
2021-03-01 13:15 ` [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
@ 2021-03-25 11:48 ` Mickaël Salaün
2021-03-25 14:31 ` Masahiro Yamada
2021-03-25 15:27 ` [tip: x86/cleanups] x86/syscalls: Fix " tip-bot2 for Masahiro Yamada
1 sibling, 1 reply; 12+ messages in thread
From: Mickaël Salaün @ 2021-03-25 11:48 UTC (permalink / raw)
To: Masahiro Yamada, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
x86, H . Peter Anvin
Cc: linux-kernel, Mickaël Salaün, Andy Lutomirski,
Brian Gerst, Dominik Brodowski, James Morris
Hi Masahiro,
What is the status of this patch? Could you please push it to -next?
This would avoid emails from lkp:
https://lore.kernel.org/linux-security-module/202103191423.Jl0jVzfL-lkp@intel.com/
Thanks,
Mickaël
On 01/03/2021 14:15, Masahiro Yamada wrote:
> Building kernel/sys_ni.c with W=1 emits tons of -Wmissing-prototypes
> warnings.
>
> $ make W=1 kernel/sys_ni.o
> [ snip ]
> CC kernel/sys_ni.o
> In file included from kernel/sys_ni.c:10:
> ./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__x64_sys_io_setup' [-Wmissing-prototypes]
> 83 | __weak long __##abi##_##name(const struct pt_regs *__unused) \
> | ^~
> ./arch/x86/include/asm/syscall_wrapper.h:100:2: note: in expansion of macro '__COND_SYSCALL'
> 100 | __COND_SYSCALL(x64, sys_##name)
> | ^~~~~~~~~~~~~~
> ./arch/x86/include/asm/syscall_wrapper.h:256:2: note: in expansion of macro '__X64_COND_SYSCALL'
> 256 | __X64_COND_SYSCALL(name) \
> | ^~~~~~~~~~~~~~~~~~
> kernel/sys_ni.c:39:1: note: in expansion of macro 'COND_SYSCALL'
> 39 | COND_SYSCALL(io_setup);
> | ^~~~~~~~~~~~
> ./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__ia32_sys_io_setup' [-Wmissing-prototypes]
> 83 | __weak long __##abi##_##name(const struct pt_regs *__unused) \
> | ^~
> ./arch/x86/include/asm/syscall_wrapper.h:120:2: note: in expansion of macro '__COND_SYSCALL'
> 120 | __COND_SYSCALL(ia32, sys_##name)
> | ^~~~~~~~~~~~~~
> ./arch/x86/include/asm/syscall_wrapper.h:257:2: note: in expansion of macro '__IA32_COND_SYSCALL'
> 257 | __IA32_COND_SYSCALL(name)
> | ^~~~~~~~~~~~~~~~~~~
> kernel/sys_ni.c:39:1: note: in expansion of macro 'COND_SYSCALL'
> 39 | COND_SYSCALL(io_setup);
> | ^~~~~~~~~~~~
> ...
>
> __SYS_STUB0() and __SYS_STUBx() defined a few lines above have forward
> declarations. Let's do likewise for __COND_SYSCALL() to fix the
> warnings.
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> Tested-by: Mickaël Salaün <mic@linux.microsoft.com>
> ---
>
> arch/x86/include/asm/syscall_wrapper.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
> index a84333adeef2..80c08c7d5e72 100644
> --- a/arch/x86/include/asm/syscall_wrapper.h
> +++ b/arch/x86/include/asm/syscall_wrapper.h
> @@ -80,6 +80,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
> }
>
> #define __COND_SYSCALL(abi, name) \
> + __weak long __##abi##_##name(const struct pt_regs *__unused); \
> __weak long __##abi##_##name(const struct pt_regs *__unused) \
> { \
> return sys_ni_syscall(); \
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL()
2021-03-25 11:48 ` Mickaël Salaün
@ 2021-03-25 14:31 ` Masahiro Yamada
2021-04-09 4:48 ` Masahiro Yamada
0 siblings, 1 reply; 12+ messages in thread
From: Masahiro Yamada @ 2021-03-25 14:31 UTC (permalink / raw)
To: Mickaël Salaün, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, X86 ML
Cc: H . Peter Anvin, Linux Kernel Mailing List,
Mickaël Salaün, Andy Lutomirski, Brian Gerst,
Dominik Brodowski, James Morris
On Thu, Mar 25, 2021 at 8:48 PM Mickaël Salaün <mic@digikod.net> wrote:
>
> Hi Masahiro,
>
> What is the status of this patch? Could you please push it to -next?
> This would avoid emails from lkp:
> https://lore.kernel.org/linux-security-module/202103191423.Jl0jVzfL-lkp@intel.com/
Hmm, I also want to know the answer.
This is the *third* time that I resent this patch
to the x86 ML.
This is a territory of the x86 subsystem
because it is only touching
arch/x86/include/asm/syscall_wrapper.h
It is preferred to get this in via the x86 tree.
x86 Maintainers,
could you take a look please?
> Thanks,
> Mickaël
>
> On 01/03/2021 14:15, Masahiro Yamada wrote:
> > Building kernel/sys_ni.c with W=1 emits tons of -Wmissing-prototypes
> > warnings.
> >
> > $ make W=1 kernel/sys_ni.o
> > [ snip ]
> > CC kernel/sys_ni.o
> > In file included from kernel/sys_ni.c:10:
> > ./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__x64_sys_io_setup' [-Wmissing-prototypes]
> > 83 | __weak long __##abi##_##name(const struct pt_regs *__unused) \
> > | ^~
> > ./arch/x86/include/asm/syscall_wrapper.h:100:2: note: in expansion of macro '__COND_SYSCALL'
> > 100 | __COND_SYSCALL(x64, sys_##name)
> > | ^~~~~~~~~~~~~~
> > ./arch/x86/include/asm/syscall_wrapper.h:256:2: note: in expansion of macro '__X64_COND_SYSCALL'
> > 256 | __X64_COND_SYSCALL(name) \
> > | ^~~~~~~~~~~~~~~~~~
> > kernel/sys_ni.c:39:1: note: in expansion of macro 'COND_SYSCALL'
> > 39 | COND_SYSCALL(io_setup);
> > | ^~~~~~~~~~~~
> > ./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__ia32_sys_io_setup' [-Wmissing-prototypes]
> > 83 | __weak long __##abi##_##name(const struct pt_regs *__unused) \
> > | ^~
> > ./arch/x86/include/asm/syscall_wrapper.h:120:2: note: in expansion of macro '__COND_SYSCALL'
> > 120 | __COND_SYSCALL(ia32, sys_##name)
> > | ^~~~~~~~~~~~~~
> > ./arch/x86/include/asm/syscall_wrapper.h:257:2: note: in expansion of macro '__IA32_COND_SYSCALL'
> > 257 | __IA32_COND_SYSCALL(name)
> > | ^~~~~~~~~~~~~~~~~~~
> > kernel/sys_ni.c:39:1: note: in expansion of macro 'COND_SYSCALL'
> > 39 | COND_SYSCALL(io_setup);
> > | ^~~~~~~~~~~~
> > ...
> >
> > __SYS_STUB0() and __SYS_STUBx() defined a few lines above have forward
> > declarations. Let's do likewise for __COND_SYSCALL() to fix the
> > warnings.
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > Tested-by: Mickaël Salaün <mic@linux.microsoft.com>
> > ---
> >
> > arch/x86/include/asm/syscall_wrapper.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
> > index a84333adeef2..80c08c7d5e72 100644
> > --- a/arch/x86/include/asm/syscall_wrapper.h
> > +++ b/arch/x86/include/asm/syscall_wrapper.h
> > @@ -80,6 +80,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
> > }
> >
> > #define __COND_SYSCALL(abi, name) \
> > + __weak long __##abi##_##name(const struct pt_regs *__unused); \
> > __weak long __##abi##_##name(const struct pt_regs *__unused) \
> > { \
> > return sys_ni_syscall(); \
> >
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 12+ messages in thread
* [tip: x86/cleanups] x86/syscalls: Fix -Wmissing-prototypes warnings from COND_SYSCALL()
2021-03-01 13:15 ` [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
2021-03-25 11:48 ` Mickaël Salaün
@ 2021-03-25 15:27 ` tip-bot2 for Masahiro Yamada
1 sibling, 0 replies; 12+ messages in thread
From: tip-bot2 for Masahiro Yamada @ 2021-03-25 15:27 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Masahiro Yamada, Ingo Molnar, mic, x86, linux-kernel
The following commit has been merged into the x86/cleanups branch of tip:
Commit-ID: 7dfe553affd0d003c7535b7ba60d09193471ea9d
Gitweb: https://git.kernel.org/tip/7dfe553affd0d003c7535b7ba60d09193471ea9d
Author: Masahiro Yamada <masahiroy@kernel.org>
AuthorDate: Mon, 01 Mar 2021 22:15:26 +09:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Thu, 25 Mar 2021 16:20:41 +01:00
x86/syscalls: Fix -Wmissing-prototypes warnings from COND_SYSCALL()
Building kernel/sys_ni.c with W=1 emits tons of -Wmissing-prototypes warnings:
$ make W=1 kernel/sys_ni.o
[ snip ]
CC kernel/sys_ni.o
./arch/x86/include/asm/syscall_wrapper.h:83:14: warning: no previous prototype for '__ia32_sys_io_setup' [-Wmissing-prototypes]
...
The problem is in __COND_SYSCALL(), the __SYS_STUB0() and __SYS_STUBx() macros
defined a few lines above already have forward declarations.
Let's do likewise for __COND_SYSCALL() to fix the warnings.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Mickaël Salaün <mic@linux.microsoft.com>
Link: https://lore.kernel.org/r/20210301131533.64671-2-masahiroy@kernel.org
---
arch/x86/include/asm/syscall_wrapper.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
index a84333a..80c08c7 100644
--- a/arch/x86/include/asm/syscall_wrapper.h
+++ b/arch/x86/include/asm/syscall_wrapper.h
@@ -80,6 +80,7 @@ extern long __ia32_sys_ni_syscall(const struct pt_regs *regs);
}
#define __COND_SYSCALL(abi, name) \
+ __weak long __##abi##_##name(const struct pt_regs *__unused); \
__weak long __##abi##_##name(const struct pt_regs *__unused) \
{ \
return sys_ni_syscall(); \
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL()
2021-03-25 14:31 ` Masahiro Yamada
@ 2021-04-09 4:48 ` Masahiro Yamada
0 siblings, 0 replies; 12+ messages in thread
From: Masahiro Yamada @ 2021-04-09 4:48 UTC (permalink / raw)
To: Mickaël Salaün, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, X86 ML
Cc: H . Peter Anvin, Linux Kernel Mailing List,
Mickaël Salaün, Andy Lutomirski, Brian Gerst,
Dominik Brodowski, James Morris
Hello, x86 maintainers,
Thanks for picking up 1/7.
Could you check 2/7 - 7/7, please?
Thank you.
On Thu, Mar 25, 2021 at 11:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> On Thu, Mar 25, 2021 at 8:48 PM Mickaël Salaün <mic@digikod.net> wrote:
> >
> > Hi Masahiro,
> >
> > What is the status of this patch? Could you please push it to -next?
> > This would avoid emails from lkp:
> > https://lore.kernel.org/linux-security-module/202103191423.Jl0jVzfL-lkp@intel.com/
>
>
> Hmm, I also want to know the answer.
> This is the *third* time that I resent this patch
> to the x86 ML.
>
> This is a territory of the x86 subsystem
> because it is only touching
> arch/x86/include/asm/syscall_wrapper.h
> It is preferred to get this in via the x86 tree.
>
> x86 Maintainers,
> could you take a look please?
>
>
>
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-04-09 4:49 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-01 13:15 [PATCH 0/7] x86: fix warnings and refactor syscall code Masahiro Yamada
2021-03-01 13:15 ` [PATCH 1/7] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
2021-03-25 11:48 ` Mickaël Salaün
2021-03-25 14:31 ` Masahiro Yamada
2021-04-09 4:48 ` Masahiro Yamada
2021-03-25 15:27 ` [tip: x86/cleanups] x86/syscalls: Fix " tip-bot2 for Masahiro Yamada
2021-03-01 13:15 ` [PATCH 2/7] x86/entry/x32: rename __x32_compat_sys_* to __x64_compat_sys_* Masahiro Yamada
2021-03-01 13:15 ` [PATCH 3/7] x86/syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-03-01 13:15 ` [PATCH 4/7] x86/syscalls: stop filling syscall arrays with *_sys_ni_syscall Masahiro Yamada
2021-03-01 13:15 ` [PATCH 5/7] x86/unistd: define X32_NR_syscalls only for 64-bit kernel Masahiro Yamada
2021-03-01 13:15 ` [PATCH 6/7] x86/syscalls: use __NR_syscalls instead of __NR_syscall_max Masahiro Yamada
2021-03-01 13:15 ` [PATCH 7/7] x86/syscalls: switch to generic syscallhdr.sh Masahiro Yamada
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).