From 39859aea411b1696c6bc0c04bd2b5095ddba6196 Mon Sep 17 00:00:00 2001 From: Rohan McLure Date: Wed, 21 Sep 2022 16:55:57 +1000 Subject: powerpc: Enable compile-time check for syscall handlers The table of syscall handlers and registered compatibility syscall handlers has in past been produced using assembly, with function references resolved at link time. This moves link-time errors to compile-time, by rewriting systbl.S in C, and including the linux/syscalls.h, linux/compat.h and asm/syscalls.h headers for prototypes. Reported-by: Arnd Bergmann Signed-off-by: Rohan McLure Reviewed-by: Nicholas Piggin Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20220921065605.1051927-18-rmclure@linux.ibm.com --- arch/powerpc/kernel/systbl.S | 45 -------------------------------------------- arch/powerpc/kernel/systbl.c | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 45 deletions(-) delete mode 100644 arch/powerpc/kernel/systbl.S create mode 100644 arch/powerpc/kernel/systbl.c diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.S deleted file mode 100644 index 280d6b6955e2..000000000000 --- a/arch/powerpc/kernel/systbl.S +++ /dev/null @@ -1,45 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * This file contains the table of syscall-handling functions. - * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) - * - * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) - * and Paul Mackerras. - * - * Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com) - * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) - */ - -#include - -#ifdef CONFIG_RELOCATABLE -.section .data.rel.ro,"aw" -#else -.section .rodata,"a" -#endif - -#ifdef CONFIG_PPC64 - .p2align 3 -#define __SYSCALL(nr, entry) .8byte entry -#else - .p2align 2 -#define __SYSCALL(nr, entry) .long entry -#endif - -#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) -.globl sys_call_table -sys_call_table: -#ifdef CONFIG_PPC64 -#include -#else -#include -#endif - -#ifdef CONFIG_COMPAT -#undef __SYSCALL_WITH_COMPAT -#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat) -.globl compat_sys_call_table -compat_sys_call_table: -#define compat_sys_sigsuspend sys_sigsuspend -#include -#endif diff --git a/arch/powerpc/kernel/systbl.c b/arch/powerpc/kernel/systbl.c new file mode 100644 index 000000000000..ce52bd2ec292 --- /dev/null +++ b/arch/powerpc/kernel/systbl.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * This file contains the table of syscall-handling functions. + * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) + * + * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) + * and Paul Mackerras. + * + * Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com) + * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) + */ + +#include +#include +#include +#include + +#define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry) +#define __SYSCALL(nr, entry) [nr] = (unsigned long) &entry, + +const unsigned long sys_call_table[] = { +#ifdef CONFIG_PPC64 +#include +#else +#include +#endif +}; + +#ifdef CONFIG_COMPAT +#undef __SYSCALL_WITH_COMPAT +#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat) +const unsigned long compat_sys_call_table[] = { +#include +}; +#endif /* CONFIG_COMPAT */ -- cgit v1.2.3