Re: [PATCH 17/23] powerpc: Enable compile-time check for syscall handlers

2022-09-19 Thread Nicholas Piggin
On Fri Sep 16, 2022 at 3:32 PM AEST, Rohan McLure wrote:
> 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 
> Reported-by: Nicholas Piggin 
> ---
> V1 -> V2: New patch.
> V4 -> V5: For this patch only, represent handler function pointers as
> unsigned long. Remove reference to syscall wrappers. Use asm/syscalls.h
> which implies asm/syscall.h

Thanks, I think this is the right way to split the patches.

I'm not sure if I reported this issue, but I really like the patch.

Reviewed-by: Nicholas Piggin 

> ---
>  arch/powerpc/kernel/{systbl.S => systbl.c} | 28 
>  1 file changed, 11 insertions(+), 17 deletions(-)
>
> diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.c
> similarity index 61%
> rename from arch/powerpc/kernel/systbl.S
> rename to arch/powerpc/kernel/systbl.c
> index 6c1db3b6de2d..ce52bd2ec292 100644
> --- a/arch/powerpc/kernel/systbl.S
> +++ b/arch/powerpc/kernel/systbl.c
> @@ -10,32 +10,26 @@
>   * PPC64 updates by Dave Engebretsen (engeb...@us.ibm.com) 
>   */
>  
> -#include 
> +#include 
> +#include 
> +#include 
> +#include 
>  
> -.section .rodata,"a"
> +#define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry)
> +#define __SYSCALL(nr, entry) [nr] = (unsigned long) ,
>  
> -#ifdef CONFIG_PPC64
> - .p2align3
> -#define __SYSCALL(nr, entry) .8byte entry
> -#else
> - .p2align2
> -#define __SYSCALL(nr, entry) .long entry
> -#endif
> -
> -#define __SYSCALL_WITH_COMPAT(nr, native, compat)__SYSCALL(nr, native)
> -.globl sys_call_table
> -sys_call_table:
> +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)
> -.globl compat_sys_call_table
> -compat_sys_call_table:
> -#define compat_sys_sigsuspendsys_sigsuspend
> +const unsigned long compat_sys_call_table[] = {
>  #include 
> -#endif
> +};
> +#endif /* CONFIG_COMPAT */
> -- 
> 2.34.1



[PATCH 17/23] powerpc: Enable compile-time check for syscall handlers

2022-09-15 Thread Rohan McLure
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 
Reported-by: Nicholas Piggin 
---
V1 -> V2: New patch.
V4 -> V5: For this patch only, represent handler function pointers as
unsigned long. Remove reference to syscall wrappers. Use asm/syscalls.h
which implies asm/syscall.h
---
 arch/powerpc/kernel/{systbl.S => systbl.c} | 28 
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.c
similarity index 61%
rename from arch/powerpc/kernel/systbl.S
rename to arch/powerpc/kernel/systbl.c
index 6c1db3b6de2d..ce52bd2ec292 100644
--- a/arch/powerpc/kernel/systbl.S
+++ b/arch/powerpc/kernel/systbl.c
@@ -10,32 +10,26 @@
  * PPC64 updates by Dave Engebretsen (engeb...@us.ibm.com) 
  */
 
-#include 
+#include 
+#include 
+#include 
+#include 
 
-.section .rodata,"a"
+#define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry)
+#define __SYSCALL(nr, entry) [nr] = (unsigned long) ,
 
-#ifdef CONFIG_PPC64
-   .p2align3
-#define __SYSCALL(nr, entry)   .8byte entry
-#else
-   .p2align2
-#define __SYSCALL(nr, entry)   .long entry
-#endif
-
-#define __SYSCALL_WITH_COMPAT(nr, native, compat)  __SYSCALL(nr, native)
-.globl sys_call_table
-sys_call_table:
+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)
-.globl compat_sys_call_table
-compat_sys_call_table:
-#define compat_sys_sigsuspend  sys_sigsuspend
+const unsigned long compat_sys_call_table[] = {
 #include 
-#endif
+};
+#endif /* CONFIG_COMPAT */
-- 
2.34.1