From: ebiederm@xmission.com (Eric W. Biederman)
To: Peter Collingbourne <pcc@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Evgenii Stepanov <eugenis@google.com>,
Kostya Serebryany <kcc@google.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Dave Martin <Dave.Martin@arm.com>, Will Deacon <will@kernel.org>,
Oleg Nesterov <oleg@redhat.com>,
"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Kevin Brodsky <kevin.brodsky@arm.com>,
Andrey Konovalov <andreyknvl@google.com>,
Richard Henderson <rth@twiddle.net>,
linux-api@vger.kernel.org, Helge Deller <deller@gmx.de>,
David Spickett <david.spickett@linaro.org>
Subject: Re: [PATCH v14 4/8] signal: deduplicate code dealing with common _sigfault fields
Date: Mon, 09 Nov 2020 18:41:25 -0600 [thread overview]
Message-ID: <87lffa11sa.fsf@x220.int.ebiederm.org> (raw)
In-Reply-To: <4d826a62121153d54d7e36fc8a402c97e2106764.1604523707.git.pcc@google.com> (Peter Collingbourne's message of "Wed, 4 Nov 2020 13:18:07 -0800")
Peter Collingbourne <pcc@google.com> writes:
> We're about to add more common _sigfault fields, so deduplicate the
> existing code for initializing _sigfault fields in {send,force}_sig_*,
> and for copying _sigfault fields in copy_siginfo_to_external32 and
> post_copy_siginfo_from_user32, to reduce the number of places that
> will need to be updated by upcoming changes.
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
No real objection but I am wondering if it might be better to
introduce two small inline functions for setting common fields
instead of:
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = ptr_to_compat(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
and
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = compat_ptr(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
perhaps called:
copy_sigfault_common_to_external32
post_copy_sigfault_common_from_user32
I have not benchmarked or anything but my gut says one less conditional
branch to worry about makes dealing with spectre easier and probably
produces faster code as well. Possibly even smaller code.
Eric
> Signed-off-by: Peter Collingbourne <pcc@google.com>
> Link: https://linux-review.googlesource.com/id/I4f56174e1b7b2bf4a3c8139e6879cbfd52750a24
> ---
> include/linux/signal.h | 13 ++++++
> kernel/signal.c | 101 ++++++++++++++++-------------------------
> 2 files changed, 53 insertions(+), 61 deletions(-)
>
> diff --git a/include/linux/signal.h b/include/linux/signal.h
> index b256f9c65661..e9fb05041e7a 100644
> --- a/include/linux/signal.h
> +++ b/include/linux/signal.h
> @@ -50,6 +50,19 @@ enum siginfo_layout {
>
> enum siginfo_layout siginfo_layout(unsigned sig, int si_code);
>
> +static inline bool siginfo_layout_is_fault(enum siginfo_layout layout)
> +{
> + switch (layout) {
> + case SIL_FAULT:
> + case SIL_FAULT_MCEERR:
> + case SIL_FAULT_BNDERR:
> + case SIL_FAULT_PKUERR:
> + return true;
> + default:
> + return false;
> + }
> +}
> +
> /*
> * Define some primitives to manipulate sigset_t.
> */
> diff --git a/kernel/signal.c b/kernel/signal.c
> index ef8f2a28d37c..74e7315c24db 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -1650,6 +1650,15 @@ void force_sigsegv(int sig)
> force_sig(SIGSEGV);
> }
>
> +static void set_sigfault_common_fields(struct kernel_siginfo *info, int sig,
> + int code, void __user *addr)
> +{
> + info->si_signo = sig;
> + info->si_errno = 0;
> + info->si_code = code;
> + info->si_addr = addr;
> +}
> +
> int force_sig_fault_to_task(int sig, int code, void __user *addr
> ___ARCH_SI_TRAPNO(int trapno)
> ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
> @@ -1658,10 +1667,7 @@ int force_sig_fault_to_task(int sig, int code, void __user *addr
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = sig;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, sig, code, addr);
> #ifdef __ARCH_SI_TRAPNO
> info.si_trapno = trapno;
> #endif
> @@ -1690,10 +1696,7 @@ int send_sig_fault(int sig, int code, void __user *addr
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = sig;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, sig, code, addr);
> #ifdef __ARCH_SI_TRAPNO
> info.si_trapno = trapno;
> #endif
> @@ -1711,10 +1714,7 @@ int force_sig_mceerr(int code, void __user *addr, short lsb)
>
> WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
> clear_siginfo(&info);
> - info.si_signo = SIGBUS;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGBUS, code, addr);
> info.si_addr_lsb = lsb;
> return force_sig_info(&info);
> }
> @@ -1725,10 +1725,7 @@ int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *
>
> WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
> clear_siginfo(&info);
> - info.si_signo = SIGBUS;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGBUS, code, addr);
> info.si_addr_lsb = lsb;
> return send_sig_info(info.si_signo, &info, t);
> }
> @@ -1739,10 +1736,7 @@ int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper)
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = SIGSEGV;
> - info.si_errno = 0;
> - info.si_code = SEGV_BNDERR;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGSEGV, SEGV_BNDERR, addr);
> info.si_lower = lower;
> info.si_upper = upper;
> return force_sig_info(&info);
> @@ -1754,10 +1748,7 @@ int force_sig_pkuerr(void __user *addr, u32 pkey)
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = SIGSEGV;
> - info.si_errno = 0;
> - info.si_code = SEGV_PKUERR;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGSEGV, SEGV_PKUERR, addr);
> info.si_pkey = pkey;
> return force_sig_info(&info);
> }
> @@ -1771,10 +1762,8 @@ int force_sig_ptrace_errno_trap(int errno, void __user *addr)
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = SIGTRAP;
> + set_sigfault_common_fields(&info, SIGTRAP, TRAP_HWBKPT, addr);
> info.si_errno = errno;
> - info.si_code = TRAP_HWBKPT;
> - info.si_addr = addr;
> return force_sig_info(&info);
> }
>
> @@ -3267,12 +3256,23 @@ int copy_siginfo_from_user(kernel_siginfo_t *to, const siginfo_t __user *from)
> void copy_siginfo_to_external32(struct compat_siginfo *to,
> const struct kernel_siginfo *from)
> {
> + enum siginfo_layout layout =
> + siginfo_layout(from->si_signo, from->si_code);
> +
> memset(to, 0, sizeof(*to));
>
> to->si_signo = from->si_signo;
> to->si_errno = from->si_errno;
> to->si_code = from->si_code;
> - switch(siginfo_layout(from->si_signo, from->si_code)) {
> +
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = ptr_to_compat(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
> +
> + switch (layout) {
> case SIL_KILL:
> to->si_pid = from->si_pid;
> to->si_uid = from->si_uid;
> @@ -3287,31 +3287,15 @@ void copy_siginfo_to_external32(struct compat_siginfo *to,
> to->si_fd = from->si_fd;
> break;
> case SIL_FAULT:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> break;
> case SIL_FAULT_MCEERR:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_addr_lsb = from->si_addr_lsb;
> break;
> case SIL_FAULT_BNDERR:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_lower = ptr_to_compat(from->si_lower);
> to->si_upper = ptr_to_compat(from->si_upper);
> break;
> case SIL_FAULT_PKUERR:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_pkey = from->si_pkey;
> break;
> case SIL_CHLD:
> @@ -3348,11 +3332,22 @@ int __copy_siginfo_to_user32(struct compat_siginfo __user *to,
> static int post_copy_siginfo_from_user32(kernel_siginfo_t *to,
> const struct compat_siginfo *from)
> {
> + enum siginfo_layout layout =
> + siginfo_layout(from->si_signo, from->si_code);
> +
> clear_siginfo(to);
> to->si_signo = from->si_signo;
> to->si_errno = from->si_errno;
> to->si_code = from->si_code;
> - switch(siginfo_layout(from->si_signo, from->si_code)) {
> +
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = compat_ptr(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
> +
> + switch (layout) {
> case SIL_KILL:
> to->si_pid = from->si_pid;
> to->si_uid = from->si_uid;
> @@ -3367,31 +3362,15 @@ static int post_copy_siginfo_from_user32(kernel_siginfo_t *to,
> to->si_fd = from->si_fd;
> break;
> case SIL_FAULT:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> break;
> case SIL_FAULT_MCEERR:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_addr_lsb = from->si_addr_lsb;
> break;
> case SIL_FAULT_BNDERR:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_lower = compat_ptr(from->si_lower);
> to->si_upper = compat_ptr(from->si_upper);
> break;
> case SIL_FAULT_PKUERR:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_pkey = from->si_pkey;
> break;
> case SIL_CHLD:
WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman)
To: Peter Collingbourne <pcc@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Helge Deller <deller@gmx.de>,
Kevin Brodsky <kevin.brodsky@arm.com>,
Oleg Nesterov <oleg@redhat.com>,
linux-api@vger.kernel.org,
"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
Kostya Serebryany <kcc@google.com>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Andrey Konovalov <andreyknvl@google.com>,
David Spickett <david.spickett@linaro.org>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Will Deacon <will@kernel.org>, Dave Martin <Dave.Martin@arm.com>,
Evgenii Stepanov <eugenis@google.com>,
Richard Henderson <rth@twiddle.net>
Subject: Re: [PATCH v14 4/8] signal: deduplicate code dealing with common _sigfault fields
Date: Mon, 09 Nov 2020 18:41:25 -0600 [thread overview]
Message-ID: <87lffa11sa.fsf@x220.int.ebiederm.org> (raw)
In-Reply-To: <4d826a62121153d54d7e36fc8a402c97e2106764.1604523707.git.pcc@google.com> (Peter Collingbourne's message of "Wed, 4 Nov 2020 13:18:07 -0800")
Peter Collingbourne <pcc@google.com> writes:
> We're about to add more common _sigfault fields, so deduplicate the
> existing code for initializing _sigfault fields in {send,force}_sig_*,
> and for copying _sigfault fields in copy_siginfo_to_external32 and
> post_copy_siginfo_from_user32, to reduce the number of places that
> will need to be updated by upcoming changes.
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
No real objection but I am wondering if it might be better to
introduce two small inline functions for setting common fields
instead of:
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = ptr_to_compat(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
and
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = compat_ptr(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
perhaps called:
copy_sigfault_common_to_external32
post_copy_sigfault_common_from_user32
I have not benchmarked or anything but my gut says one less conditional
branch to worry about makes dealing with spectre easier and probably
produces faster code as well. Possibly even smaller code.
Eric
> Signed-off-by: Peter Collingbourne <pcc@google.com>
> Link: https://linux-review.googlesource.com/id/I4f56174e1b7b2bf4a3c8139e6879cbfd52750a24
> ---
> include/linux/signal.h | 13 ++++++
> kernel/signal.c | 101 ++++++++++++++++-------------------------
> 2 files changed, 53 insertions(+), 61 deletions(-)
>
> diff --git a/include/linux/signal.h b/include/linux/signal.h
> index b256f9c65661..e9fb05041e7a 100644
> --- a/include/linux/signal.h
> +++ b/include/linux/signal.h
> @@ -50,6 +50,19 @@ enum siginfo_layout {
>
> enum siginfo_layout siginfo_layout(unsigned sig, int si_code);
>
> +static inline bool siginfo_layout_is_fault(enum siginfo_layout layout)
> +{
> + switch (layout) {
> + case SIL_FAULT:
> + case SIL_FAULT_MCEERR:
> + case SIL_FAULT_BNDERR:
> + case SIL_FAULT_PKUERR:
> + return true;
> + default:
> + return false;
> + }
> +}
> +
> /*
> * Define some primitives to manipulate sigset_t.
> */
> diff --git a/kernel/signal.c b/kernel/signal.c
> index ef8f2a28d37c..74e7315c24db 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -1650,6 +1650,15 @@ void force_sigsegv(int sig)
> force_sig(SIGSEGV);
> }
>
> +static void set_sigfault_common_fields(struct kernel_siginfo *info, int sig,
> + int code, void __user *addr)
> +{
> + info->si_signo = sig;
> + info->si_errno = 0;
> + info->si_code = code;
> + info->si_addr = addr;
> +}
> +
> int force_sig_fault_to_task(int sig, int code, void __user *addr
> ___ARCH_SI_TRAPNO(int trapno)
> ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
> @@ -1658,10 +1667,7 @@ int force_sig_fault_to_task(int sig, int code, void __user *addr
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = sig;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, sig, code, addr);
> #ifdef __ARCH_SI_TRAPNO
> info.si_trapno = trapno;
> #endif
> @@ -1690,10 +1696,7 @@ int send_sig_fault(int sig, int code, void __user *addr
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = sig;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, sig, code, addr);
> #ifdef __ARCH_SI_TRAPNO
> info.si_trapno = trapno;
> #endif
> @@ -1711,10 +1714,7 @@ int force_sig_mceerr(int code, void __user *addr, short lsb)
>
> WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
> clear_siginfo(&info);
> - info.si_signo = SIGBUS;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGBUS, code, addr);
> info.si_addr_lsb = lsb;
> return force_sig_info(&info);
> }
> @@ -1725,10 +1725,7 @@ int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *
>
> WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
> clear_siginfo(&info);
> - info.si_signo = SIGBUS;
> - info.si_errno = 0;
> - info.si_code = code;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGBUS, code, addr);
> info.si_addr_lsb = lsb;
> return send_sig_info(info.si_signo, &info, t);
> }
> @@ -1739,10 +1736,7 @@ int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper)
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = SIGSEGV;
> - info.si_errno = 0;
> - info.si_code = SEGV_BNDERR;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGSEGV, SEGV_BNDERR, addr);
> info.si_lower = lower;
> info.si_upper = upper;
> return force_sig_info(&info);
> @@ -1754,10 +1748,7 @@ int force_sig_pkuerr(void __user *addr, u32 pkey)
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = SIGSEGV;
> - info.si_errno = 0;
> - info.si_code = SEGV_PKUERR;
> - info.si_addr = addr;
> + set_sigfault_common_fields(&info, SIGSEGV, SEGV_PKUERR, addr);
> info.si_pkey = pkey;
> return force_sig_info(&info);
> }
> @@ -1771,10 +1762,8 @@ int force_sig_ptrace_errno_trap(int errno, void __user *addr)
> struct kernel_siginfo info;
>
> clear_siginfo(&info);
> - info.si_signo = SIGTRAP;
> + set_sigfault_common_fields(&info, SIGTRAP, TRAP_HWBKPT, addr);
> info.si_errno = errno;
> - info.si_code = TRAP_HWBKPT;
> - info.si_addr = addr;
> return force_sig_info(&info);
> }
>
> @@ -3267,12 +3256,23 @@ int copy_siginfo_from_user(kernel_siginfo_t *to, const siginfo_t __user *from)
> void copy_siginfo_to_external32(struct compat_siginfo *to,
> const struct kernel_siginfo *from)
> {
> + enum siginfo_layout layout =
> + siginfo_layout(from->si_signo, from->si_code);
> +
> memset(to, 0, sizeof(*to));
>
> to->si_signo = from->si_signo;
> to->si_errno = from->si_errno;
> to->si_code = from->si_code;
> - switch(siginfo_layout(from->si_signo, from->si_code)) {
> +
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = ptr_to_compat(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
> +
> + switch (layout) {
> case SIL_KILL:
> to->si_pid = from->si_pid;
> to->si_uid = from->si_uid;
> @@ -3287,31 +3287,15 @@ void copy_siginfo_to_external32(struct compat_siginfo *to,
> to->si_fd = from->si_fd;
> break;
> case SIL_FAULT:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> break;
> case SIL_FAULT_MCEERR:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_addr_lsb = from->si_addr_lsb;
> break;
> case SIL_FAULT_BNDERR:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_lower = ptr_to_compat(from->si_lower);
> to->si_upper = ptr_to_compat(from->si_upper);
> break;
> case SIL_FAULT_PKUERR:
> - to->si_addr = ptr_to_compat(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_pkey = from->si_pkey;
> break;
> case SIL_CHLD:
> @@ -3348,11 +3332,22 @@ int __copy_siginfo_to_user32(struct compat_siginfo __user *to,
> static int post_copy_siginfo_from_user32(kernel_siginfo_t *to,
> const struct compat_siginfo *from)
> {
> + enum siginfo_layout layout =
> + siginfo_layout(from->si_signo, from->si_code);
> +
> clear_siginfo(to);
> to->si_signo = from->si_signo;
> to->si_errno = from->si_errno;
> to->si_code = from->si_code;
> - switch(siginfo_layout(from->si_signo, from->si_code)) {
> +
> + if (siginfo_layout_is_fault(layout)) {
> + to->si_addr = compat_ptr(from->si_addr);
> +#ifdef __ARCH_SI_TRAPNO
> + to->si_trapno = from->si_trapno;
> +#endif
> + }
> +
> + switch (layout) {
> case SIL_KILL:
> to->si_pid = from->si_pid;
> to->si_uid = from->si_uid;
> @@ -3367,31 +3362,15 @@ static int post_copy_siginfo_from_user32(kernel_siginfo_t *to,
> to->si_fd = from->si_fd;
> break;
> case SIL_FAULT:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> break;
> case SIL_FAULT_MCEERR:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_addr_lsb = from->si_addr_lsb;
> break;
> case SIL_FAULT_BNDERR:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_lower = compat_ptr(from->si_lower);
> to->si_upper = compat_ptr(from->si_upper);
> break;
> case SIL_FAULT_PKUERR:
> - to->si_addr = compat_ptr(from->si_addr);
> -#ifdef __ARCH_SI_TRAPNO
> - to->si_trapno = from->si_trapno;
> -#endif
> to->si_pkey = from->si_pkey;
> break;
> case SIL_CHLD:
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-11-10 0:41 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-04 21:18 [PATCH v14 0/8] arm64: expose FAR_EL1 tag bits in siginfo Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-04 21:18 ` [PATCH v14 1/8] parisc: Drop parisc special case for __sighandler_t Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-04 21:18 ` [PATCH v14 2/8] parisc: start using signal-defs.h Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-04 21:18 ` [PATCH v14 3/8] arch: move SA_* definitions to generic headers Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-04 21:18 ` [PATCH v14 4/8] signal: deduplicate code dealing with common _sigfault fields Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-10 0:41 ` Eric W. Biederman [this message]
2020-11-10 0:41 ` Eric W. Biederman
2020-11-10 2:37 ` Peter Collingbourne
2020-11-10 2:37 ` Peter Collingbourne
2020-11-10 15:38 ` Eric W. Biederman
2020-11-10 15:38 ` Eric W. Biederman
2020-11-04 21:18 ` [PATCH v14 5/8] signal: clear non-uapi flag bits when passing/returning sa_flags Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-10 0:35 ` Eric W. Biederman
2020-11-10 0:35 ` Eric W. Biederman
2020-11-10 2:19 ` Peter Collingbourne
2020-11-10 2:19 ` Peter Collingbourne
2020-11-04 21:18 ` [PATCH v14 6/8] signal: define the SA_UNSUPPORTED bit in sa_flags Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-04 21:18 ` [PATCH v14 7/8] signal: define the field siginfo.si_faultflags Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-10 1:54 ` Eric W. Biederman
2020-11-10 1:54 ` Eric W. Biederman
2020-11-11 11:10 ` Haren Myneni
2020-11-11 11:10 ` Haren Myneni
2020-11-11 20:46 ` Eric W. Biederman
2020-11-11 20:46 ` Eric W. Biederman
2020-11-10 1:57 ` Eric W. Biederman
2020-11-10 1:57 ` Eric W. Biederman
2020-11-11 17:27 ` Dave Martin
2020-11-11 17:27 ` Dave Martin
2020-11-11 20:15 ` Eric W. Biederman
2020-11-11 20:15 ` Eric W. Biederman
2020-11-11 20:28 ` Eric W. Biederman
2020-11-11 20:28 ` Eric W. Biederman
2020-11-12 17:21 ` Dave Martin
2020-11-12 17:21 ` Dave Martin
2020-11-12 17:23 ` Dave Martin
2020-11-12 17:23 ` Dave Martin
2020-11-12 20:01 ` Eric W. Biederman
2020-11-12 20:01 ` Eric W. Biederman
2020-11-04 21:18 ` [PATCH v14 8/8] arm64: expose FAR_EL1 tag bits in siginfo Peter Collingbourne
2020-11-04 21:18 ` Peter Collingbourne
2020-11-10 1:13 ` Eric W. Biederman
2020-11-10 1:13 ` Eric W. Biederman
2020-11-10 3:49 ` Peter Collingbourne
2020-11-10 3:49 ` Peter Collingbourne
2020-11-10 15:12 ` Eric W. Biederman
2020-11-10 15:12 ` Eric W. Biederman
2020-11-10 22:06 ` Peter Collingbourne
2020-11-10 22:06 ` Peter Collingbourne
2020-11-11 7:45 ` Eric W. Biederman
2020-11-11 7:45 ` Eric W. Biederman
2020-11-11 17:46 ` Dave Martin
2020-11-11 17:46 ` Dave Martin
2020-11-12 23:20 ` Peter Collingbourne
2020-11-12 23:20 ` Peter Collingbourne
2020-11-12 18:53 ` Catalin Marinas
2020-11-12 18:53 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87lffa11sa.fsf@x220.int.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=Dave.Martin@arm.com \
--cc=James.Bottomley@hansenpartnership.com \
--cc=andreyknvl@google.com \
--cc=catalin.marinas@arm.com \
--cc=david.spickett@linaro.org \
--cc=deller@gmx.de \
--cc=eugenis@google.com \
--cc=kcc@google.com \
--cc=kevin.brodsky@arm.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=oleg@redhat.com \
--cc=pcc@google.com \
--cc=rth@twiddle.net \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.