On Wed, 11 Jul 2012 16:32:20 +0100 Will Deacon <will.deacon@xxxxxxx> wrote: > Commit 48b25c43 ("[PATCH v3] ipc: provide generic compat versions of IPC > syscalls") added a new ARCH_WANT_OLD_COMPAT_IPC config option for > architectures to select if their compat target requires the old IPC > syscall interface. > > For architectures (such as AArch64) that do not require the internal > calling conventions provided by this option, but have a compat target > where the C library passes the IPC_64 flag explicitly, > compat_ipc_parse_version no longer strips out the flag before calling > the native system call implementation, resulting in unknown SHM/IPC > commands and -EINVAL being returned to userspace. > > This patch separates the selection of the internal calling conventions > for the IPC syscalls from the version parsing, allowing architectures to > select __ARCH_WANT_COMPAT_IPC_PARSE_VERSION if they want to use version > parsing whilst retaining the newer syscall calling conventions. > > Cc: Chris Metcalf <cmetcalf@xxxxxxxxxx> > Cc: Arnd Bergmann <arnd@xxxxxxxx> > Acked-by: Catalin Marinas <catalin.marinas@xxxxxxx> > Signed-off-by: Will Deacon <will.deacon@xxxxxxx> > --- > include/linux/compat.h | 1 + > ipc/compat.c | 2 +- > 2 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/include/linux/compat.h b/include/linux/compat.h > index 4e89039..9f68e90 100644 > --- a/include/linux/compat.h > +++ b/include/linux/compat.h > @@ -256,6 +256,7 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, > compat_size_t __user *len_ptr); > > #ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC > +#define __ARCH_WANT_COMPAT_IPC_PARSE_VERSION > long compat_sys_semctl(int first, int second, int third, void __user *uptr); > long compat_sys_msgsnd(int first, int second, int third, void __user *uptr); > long compat_sys_msgrcv(int first, int second, int msgtyp, int third, > diff --git a/ipc/compat.c b/ipc/compat.c > index 53cebdf..a41600f 100644 > --- a/ipc/compat.c > +++ b/ipc/compat.c > @@ -118,7 +118,7 @@ extern int sem_ctls[]; > > static inline int compat_ipc_parse_version(int *cmd) > { > -#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC > +#ifdef __ARCH_WANT_COMPAT_IPC_PARSE_VERSION > int version = *cmd & IPC_64; > > /* this is tricky: architectures that have support for the old Could we do this purely in Kconfig? Add a new CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION and always set it true if CONFIG_ARCH_WANT_OLD_COMPAT_IPC? -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html