linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Dave Martin <Dave.Martin@arm.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Will Deacon <will@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Oleg Nesterov <oleg@redhat.com>,
	Kostya Serebryany <kcc@google.com>,
	Evgenii Stepanov <eugenis@google.com>,
	Andrey Konovalov <andreyknvl@google.com>,
	Vincenzo Frascino <vincenzo.frascino@arm.com>,
	Peter Collingbourne <pcc@google.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [PATCH v8] arm64: Expose FAR_EL1 tag bits in siginfo
Date: Tue, 23 Jun 2020 15:38:47 +0100	[thread overview]
Message-ID: <20200623143846.GX25945@arm.com> (raw)
In-Reply-To: <87sgemrlgc.fsf@x220.int.ebiederm.org>

On Tue, Jun 23, 2020 at 07:54:59AM -0500, Eric W. Biederman wrote:
> Peter Collingbourne <pcc@google.com> writes:
> 
> > diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
> > index 47f651df781c..a8380a2b6361 100644
> > --- a/arch/arm64/kernel/traps.c
> > +++ b/arch/arm64/kernel/traps.c
> > @@ -235,20 +235,41 @@ static void arm64_show_signal(int signo, const char *str)
> >  }
> >  
> >  void arm64_force_sig_fault(int signo, int code, void __user *addr,
> > +			   unsigned long far, unsigned char far_tb_mask,
> >  			   const char *str)
> >  {
> >  	arm64_show_signal(signo, str);
> > -	if (signo == SIGKILL)
> > +	if (signo == SIGKILL) {
> >  		force_sig(SIGKILL);
> > -	else
> > -		force_sig_fault(signo, code, addr);
> > +	} else {
> > +		struct kernel_siginfo info;
> > +		clear_siginfo(&info);
> > +		info.si_signo = signo;
> > +		info.si_errno = 0;
> > +		info.si_code = code;
> > +		info.si_addr = addr;
> > +		info.si_addr_top_byte = (far >> 56) & far_tb_mask;
> > +		info.si_addr_top_byte_mask = far_tb_mask;
> > +		force_sig_info(&info);
> > +	}
> >  }
> >  
> >  void arm64_force_sig_mceerr(int code, void __user *addr, short lsb,
> > -			    const char *str)
> > +			    unsigned long far, const char *str)
> >  {
> > +	struct kernel_siginfo info;
> > +
> >  	arm64_show_signal(SIGBUS, str);
> > -	force_sig_mceerr(code, addr, lsb);
> > +
> > +	clear_siginfo(&info);
> > +	info.si_signo = SIGBUS;
> > +	info.si_errno = 0;
> > +	info.si_code = code;
> > +	info.si_addr = addr;
> > +	info.si_addr_lsb = lsb;
> > +	info.si_addr_top_byte = far >> 56;
> > +	info.si_addr_top_byte_mask = 0xff;
> > +	force_sig_info(&info);
> >  }
> 
> I have a real problem with this construction.  force_sig_info is not an
> interface that should be used for anything except to define a wrapper
> that takes it's parameters.

Can you elaborate?  How would you do this king of thing.

AIUI we absolutely need a forced signal here, we need to supply
metadata, and we don't have to open-code all that at every relevant
signal generation site...

> It is not clear to me that if you have adapted siginfo_layout.

Garbled sentence?

> > diff --git a/include/uapi/asm-generic/siginfo.h b/include/uapi/asm-generic/siginfo.h
> > index cb3d6c267181..6dd82373eb2d 100644
> > --- a/include/uapi/asm-generic/siginfo.h
> > +++ b/include/uapi/asm-generic/siginfo.h
> > @@ -91,6 +91,14 @@ union __sifields {
> >  				char _dummy_pkey[__ADDR_BND_PKEY_PAD];
> >  				__u32 _pkey;
> >  			} _addr_pkey;
> > +#ifdef __aarch64__
> > +			/* used with all si_codes */
> > +			struct {
> > +				short _dummy_top_byte;

^ What's this for?  I don't have Eric's insight here.

> > +				unsigned char _top_byte;
> > +				unsigned char _top_byte_mask;
> > +			} _addr_top_byte;
> > +#endif
> >  		};
> >  	} _sigfault;
> >
> 
> Why the _dummy_top_byte?  Oh I see it should be spelled "short _addr_lsb;".
> 
> Please remove the "#ifdef __aarch64__".  If at all possible we want to
> design this so any other architecture who has this challenge can use the
> code.  The kind of code does not get enough attention/maintenance if it
> is built for a single architecture.

Does this belong in the user-facing siginfo?  It seems a bit strange,
when other closely-related information such as esr_context is in the
arch-specific signal frame.


If trying to make this reusable, I wonder if we should have some sort of
"address attributes" field.

An alternative approach would be to add some opaque "arch_data" field,
that the arch code can go look at when delivering the signal.


I think that's all we were trying to achieve here: tack some arch
private data onto the signal, to avoid having to stash the same info in
thread_info and pray that it doesn't get clobbered in between signal
generation and delivery.

At signal delivery time, the arch signal delivery code could inspect
this data and emit it into the signal frame as appropriate for the arch.

[...]

Cheers
---Dave

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2020-06-23 14:40 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-12 17:17 [PATCH] arm64: Expose original FAR_EL1 value in sigcontext Peter Collingbourne
2020-03-25 13:10 ` Catalin Marinas
2020-03-25 17:41   ` Peter Collingbourne
2020-03-25 17:40 ` [PATCH v2] " Peter Collingbourne
2020-03-26 16:45   ` Catalin Marinas
2020-03-27  7:56     ` Will Deacon
2020-03-27 11:39       ` Catalin Marinas
2020-03-27 19:26         ` Peter Collingbourne
2020-03-27 19:19   ` [PATCH v3] " Peter Collingbourne
2020-04-22 14:25     ` Catalin Marinas
2020-04-29 21:08     ` Will Deacon
2020-04-29 21:42       ` Peter Collingbourne
2020-05-04 17:03         ` Will Deacon
2020-05-07 17:57           ` [PATCH v4] arm64: Expose FAR_EL1 tag bits " Peter Collingbourne
2020-05-08  2:01             ` [PATCH v5] " Peter Collingbourne
2020-05-12 16:25               ` Catalin Marinas
2020-05-13 18:09               ` [PATCH v6] " Peter Collingbourne
2020-05-13 20:28                 ` Dave Martin
2020-05-15  0:58                   ` Peter Collingbourne
2020-05-18  9:53                     ` Dave Martin
2020-05-19 22:00                       ` Peter Collingbourne
2020-05-20  8:55                         ` Will Deacon
2020-05-20  9:26                           ` Dave Martin
2020-05-21  2:28                             ` Peter Collingbourne
2020-05-21  2:29                               ` [PATCH v6 0/3] " Peter Collingbourne
2020-05-21  2:29                                 ` [PATCH v6 1/3] signal: Allow architectures to store arch-specific data in kernel_siginfo Peter Collingbourne
2020-05-21  2:29                                 ` [PATCH v6 2/3] arm64: Move fault address and fault code into kernel_siginfo Peter Collingbourne
2020-05-21 13:34                                   ` kbuild test robot
2020-05-21  2:29                                 ` [PATCH v6 3/3] arm64: Expose FAR_EL1 tag bits in sigcontext Peter Collingbourne
2020-05-21 12:35                               ` [PATCH v6] " Eric W. Biederman
2020-05-21 18:03                                 ` Peter Collingbourne
2020-05-21 19:24                                   ` Eric W. Biederman
2020-05-21 20:48                                     ` Peter Collingbourne
2020-06-08 18:12                                       ` Peter Collingbourne
2020-06-08 18:14                                         ` [PATCH v7] arm64: Expose FAR_EL1 tag bits in siginfo Peter Collingbourne
     [not found]                                           ` <20200623020134.16655-1-pcc@google.com>
     [not found]                                             ` <87sgemrlgc.fsf@x220.int.ebiederm.org>
2020-06-23 14:38                                               ` Dave Martin [this message]
2020-06-23 17:47                                                 ` [PATCH v8] " Eric W. Biederman
2020-06-24  0:40                                                   ` Peter Collingbourne
2020-06-24  9:28                                                     ` Dave Martin
2020-06-24 16:51                                                       ` Peter Collingbourne
2020-06-24 17:12                                                         ` Dave Martin
2020-06-24 19:51                                                           ` Peter Collingbourne
2020-07-06 16:41                                                             ` Dave Martin
2020-07-06 19:20                                                               ` Peter Collingbourne
2020-07-07 14:19                                                                 ` Dave Martin
2020-07-07 19:07                                                                   ` Peter Collingbourne
2020-07-08 11:00                                                                     ` Dave Martin
2020-07-08 13:58                                                                       ` Dave Martin
2020-07-08 22:21                                                                         ` Peter Collingbourne
2020-07-13 13:24                                                                           ` Dave Martin
2020-07-13 20:50                                                                             ` Peter Collingbourne
2020-07-14 17:36                                                                               ` Dave Martin
2020-08-18  3:16                                                                                 ` Peter Collingbourne
2020-08-18 13:50                                                                                   ` Dave Martin
2020-06-23 14:57                                             ` Dave Martin
2020-05-26 13:03                                     ` [PATCH v6] arm64: Expose FAR_EL1 tag bits in sigcontext Dave Martin
2020-04-30  9:50       ` [PATCH v3] arm64: Expose original FAR_EL1 value " Catalin Marinas
2020-04-30  9:59         ` Will Deacon
2020-04-30 13:34           ` Catalin Marinas
2020-05-04 10:19     ` Dave Martin
2020-05-07 17:55       ` Peter Collingbourne
2020-05-13 17:27         ` Dave Martin
2020-05-13 18:00           ` Peter Collingbourne

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=20200623143846.GX25945@arm.com \
    --to=dave.martin@arm.com \
    --cc=andreyknvl@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=ebiederm@xmission.com \
    --cc=eugenis@google.com \
    --cc=kcc@google.com \
    --cc=kevin.brodsky@arm.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).