[2.27] RISC-V: fix struct kernel_sigaction to match the kernel version [BZ #23069]

Message ID 20180416204132.9251-1-aurelien@aurel32.net
State New
Headers show
Series
  • [2.27] RISC-V: fix struct kernel_sigaction to match the kernel version [BZ #23069]
Related show

Commit Message

Aurelien Jarno April 16, 2018, 8:41 p.m.
The RISC-V kernel doesn't define SA_RESTORER, hence the kernel version
of struct sigaction doesn't have the sa_restorer field. The default
kernel_sigaction.h therefore can't be used.

This patch adds a RISC-V specific version of kernel_sigaction.h to fix
the issue. This fixes for example the libnih testsuite.

Note that this patch is not needed in master as the bug has been fixed
by commit b4a5d26d8835 ("linux: Consolidate sigaction implementation").
---
 ChangeLog                                        | 5 +++++
 sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h | 7 +++++++
 2 files changed, 12 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h

Comments

Aurelien Jarno April 17, 2018, 2:20 p.m. | #1
On 2018-04-16 17:54, DJ Delorie wrote:
> 
> Could the #ifdef from b4a5d26d8835's kernel_sigaction.h be backported
> instead?  It still wouldn't be a pristine backport (I'm not recommending
> backporting *all* of b4a5d26d8835) but at least as branch-specific
> 'hack' it's closer to what's in master than a riscv-specific header.

We can backport that #ifdef from b4a5d26d8835, but it means we also need
to backport the new kernel_sigaction.h files for m68k, s390, sparc, tile
(if I haven't missed any), plus commit d8abfab7d46a to fix a regression
on s390.

So it seems more risky to me. Also note that this is not an installed
header, but just a compile time header.
Joseph Myers April 17, 2018, 9:20 p.m. | #2
On Mon, 16 Apr 2018, Aurelien Jarno wrote:

> The RISC-V kernel doesn't define SA_RESTORER, hence the kernel version
> of struct sigaction doesn't have the sa_restorer field. The default
> kernel_sigaction.h therefore can't be used.
> 
> This patch adds a RISC-V specific version of kernel_sigaction.h to fix
> the issue. This fixes for example the libnih testsuite.

I think there ought to be a relevant test added to the glibc testsuite (on 
master and backported) if there isn't one already, unless it's hard to 
test this issue for some reason.
Dmitry V. Levin April 20, 2018, 5:50 p.m. | #3
On Mon, Apr 16, 2018 at 10:41:32PM +0200, Aurelien Jarno wrote:
> The RISC-V kernel doesn't define SA_RESTORER, hence the kernel version
> of struct sigaction doesn't have the sa_restorer field. The default
> kernel_sigaction.h therefore can't be used.
> 
> This patch adds a RISC-V specific version of kernel_sigaction.h to fix
> the issue. This fixes for example the libnih testsuite.
> 
> Note that this patch is not needed in master as the bug has been fixed
> by commit b4a5d26d8835 ("linux: Consolidate sigaction implementation").
> ---
>  ChangeLog                                        | 5 +++++
>  sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h | 7 +++++++
>  2 files changed, 12 insertions(+)
>  create mode 100644 sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h
> 
> diff --git a/ChangeLog b/ChangeLog
> index 536fcf1c4f..f365475a47 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2018-04-16  Aurelien Jarno  <aurelien@aurel32.net>
> +
> +	[BZ #23069]
> +	* sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h: New file.
> +
>  2018-03-29  Florian Weimer  <fweimer@redhat.com>
>  
>  	* sysdeps/unix/sysv/linux/i386/tst-bz21269.c (do_test): Also
> diff --git a/sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h b/sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h
> new file mode 100644
> index 0000000000..2a62bcc5bc
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h
> @@ -0,0 +1,7 @@
> +/* This is the sigaction structure from the RISC-V Linux 4.15 kernel.  */
> +
> +struct kernel_sigaction {
> +	__sighandler_t k_sa_handler;
> +	unsigned long sa_flags;
> +	sigset_t sa_mask;
> +};

I think this is OK given that b4a5d26d8835 cannot be easily backported to 2.27.

Patch

diff --git a/ChangeLog b/ChangeLog
index 536fcf1c4f..f365475a47 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@ 
+2018-04-16  Aurelien Jarno  <aurelien@aurel32.net>
+
+	[BZ #23069]
+	* sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h: New file.
+
 2018-03-29  Florian Weimer  <fweimer@redhat.com>
 
 	* sysdeps/unix/sysv/linux/i386/tst-bz21269.c (do_test): Also
diff --git a/sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h b/sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h
new file mode 100644
index 0000000000..2a62bcc5bc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/riscv/kernel_sigaction.h
@@ -0,0 +1,7 @@ 
+/* This is the sigaction structure from the RISC-V Linux 4.15 kernel.  */
+
+struct kernel_sigaction {
+	__sighandler_t k_sa_handler;
+	unsigned long sa_flags;
+	sigset_t sa_mask;
+};