Re: [PATCH v5 04/13] arm: Use the common syscall table

[email protected]
Newsgroups org.kernel.vger.linux-s390
Message-ID <[email protected]>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Using the common syscall table on 32-bit ARM breaks OABI compatibility for several time64 and wait syscalls due to missing or weak-linked `compat_sys_*` entry points.
- [High] Process substitution `< <(...)` breaks POSIX `/bin/sh` compatibility, causing kernel build failures on systems using dash.
--

--- Patch [4]: [PATCH v5 04/13] arm: Use the common syscall table ---
commit 4446b58b5d8e69028beb1ab8dad93b78f955eb73
Author: André Almeida <[email protected]>

arm: Use the common syscall table

This commit updates the ARM architecture to use the common syscall table.
It replaces duplicated ARM-specific syscalls with the common ones by pulling
in syscall_common.tbl and updating the ABI list.

> diff --git a/arch/arm/tools/Makefile b/arch/arm/tools/Makefile
> index 28b6da8ac5f64..fd73bf6db3bfe 100644
> --- a/arch/arm/tools/Makefile
> +++ b/arch/arm/tools/Makefile
[ ... ]
> @@ -38,11 +40,13 @@ $(kapi)/mach-types.h: $(src)/gen-mach-types $(src)/mach-types FORCE
>  	$(call if_changed,gen_mach)
>  
>  quiet_cmd_syshdr = SYSHDR  $@
> -      cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --abis common,$* \
> +      cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --abis $(abis),$* \
> +		   --common-tbl $(syscalltbl_common) \
>  		   --offset __NR_SYSCALL_BASE $< $@

[Severity: High]
Does this execute scripts containing non-POSIX bashisms?

The scripts/syscallhdr.sh script uses process substitution which requires bash:

scripts/syscallhdr.sh:gen_hdr() {
    ...
    done < <(grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$input")
}

scripts/syscalltbl.sh also uses a similar construct in gen_tbl().

This breaks POSIX /bin/sh compatibility and can cause kernel build failures
reporting "Syntax error: redirection unexpected" on distributions that use
dash as their default shell.

>  quiet_cmd_systbl = SYSTBL  $@
> -      cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis common,$* $< $@
> +      cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis),$* \
> +		   --common-tbl $(syscalltbl_common) $< $@

[Severity: High]
Does pulling in the common syscall table break OABI compatibility for
32-bit ARM?

The common table populates the compat column with compat_sys_* functions
intended for CONFIG_COMPAT, for example:

scripts/syscall_common.tbl:
    413  32  pselect6_time64  sys_pselect6  compat_sys_pselect6_time64

However, ARM OABI redefines __SYSCALL_WITH_COMPAT to use the compat column
specifically for its own OABI wrappers, not for 64-bit-on-32-bit compat
wrappers:

arch/arm/kernel/entry-common.S:sys_oabi_call_table() {
    #undef __SYSCALL_WITH_COMPAT
    #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat)
}

This clash causes build failures like "undefined reference to
compat_sys_pselect6_time64" during linking when CONFIG_OABI_COMPAT is enabled.
For syscalls with weak stubs in kernel/sys_ni.c (like io_pgetevents_time64),
the build succeeds but OABI binaries will silently receive -ENOSYS at runtime.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.