linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Martin <Dave.Martin@arm.com>
To: Will Deacon <will@kernel.org>
Cc: linux-arch@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 4/6] prctl.2: Add SVE prctls (arm64)
Date: Wed, 10 Jun 2020 13:48:40 +0100	[thread overview]
Message-ID: <20200610124838.GG25945@arm.com> (raw)
In-Reply-To: <20200610101649.GA17788@willie-the-truck>

On Wed, Jun 10, 2020 at 11:16:49AM +0100, Will Deacon wrote:
> [Dropped linux-man and Michael]
> 
> On Wed, Jun 10, 2020 at 10:44:42AM +0100, Dave Martin wrote:
> > On Tue, Jun 09, 2020 at 03:49:05PM +0100, Will Deacon wrote:
> > > On Tue, Jun 09, 2020 at 03:11:42PM +0100, Dave Martin wrote:
> > > > On Tue, Jun 09, 2020 at 10:57:35AM +0100, Will Deacon wrote:
> > > > > On Wed, May 27, 2020 at 10:17:36PM +0100, Dave Martin wrote:
> > > > > > +.RS
> > > > > > +.TP
> > > > > > +.B 0
> > > > > > +Perform the change immediately.
> > > > > > +At the next
> > > > > > +.BR execve (2)
> > > > > > +in the thread,
> > > > > > +the vector length will be reset to the value configured in
> > > > > > +.IR /proc/sys/abi/sve_default_vector_length .
> > > > > 
> > > > > (implementation note: does this mean that 'sve_default_vl' should be
> > > > >  an atomic_t, as it can be accessed concurrently? We probably need
> > > > >  {READ,WRITE}_ONCE() at the very least, as I'm not seeing any locks
> > > > >  that help us here...)
> > > > 
> > > > Is this purely theoretical?  Can you point to what could go wrong?
> > > 
> > > If the write is torn by the compiler, then a concurrent reader could end
> > > up seeing a bogus value. There could also be ToCToU issues if it's re-read.
> > 
> > It won't be torn in practice, no decision logic depends on the value
> > read, and you can't even get from the write to the read or vice-versa
> > without crossing a TU boundary (even under LTO), so there's basically
> > zero scope for sabotXXXXXoptimisation by the compiler.
> 
> Perhaps, but I'm not brave enough to state that :) Look at this crazy
> thing, for example:
> 
> https://lore.kernel.org/lkml/CAG48ez2nFks+yN1Kp4TZisso+rjvv_4UW0FTo8iFUd4Qyq1qDw@mail.gmail.com/
> 
> Could the same sort of technique be applied to:
> 
> 
> 	vl = current->thread.sve_vl_onexec ?
> 	     current->thread.sve_vl_onexec : sve_default_vl;
> 
> 	if (WARN_ON(!sve_vl_valid(vl)))
> 		vl = SVE_VL_MIN;
> 
> 	supported_vl = find_supported_vector_length(vl);
> 
> 
> so that the compiled code does something like:
> 
> 
> 	if (within_valid_bounds(sve_default_vl)) {
> 		supported_vl = jump_table(sve_default_vl); // Reload the variable
> 	} else {
> 		WARN_ON(1);
> 		supported_vl = SVE_VL_MIN;
> 	}
> 
> 
> ?
> 
> I'd certainly prefer not to have to think about that!

Well sure, but the compiler has much to lose and nothing to gain from
such a transformation here.  This is a bit different from a load of
conditional code that can be heavily const-folded during specialisation.

Anyway, I'm not saying that you're not correct about the risk, just that
this feels like a common pattern.


> > Only root is allowed to write this thing anyway.
> > 
> > > > While I doubt I thought about this very hard and I agree that you're
> > > > right in principle, I think there are probably non-atomic sysctls and
> > > > debugs files etc. all over the place.
> > > > 
> > > > I didn't want to clutter the code unnecessarily.
> > > 
> > > Right, but KCSAN is coming along and so somebody less familiar with the code
> > > will hit this eventually.
> > 
> > So the issue is theoretical, probably one of very many similar issues,
> > and anyway we have a tool for tracking them down if we need to?
> > 
> > I'm playing devil's advocate here, but I'd debate whether it's worth
> > it -- or even wise -- to fix these piecemeal unless we're confident this
> > is an egregious case.  Doing so may encourage a false sense of safety.
> > When we're in a position to do a treewide cleanup, that would be better,
> > no?
> 
> That's a good point, but it is inevitable that people will try to attempt
> treewide introduction of {READ,WRITE}_ONCE() based solely on KCSAN reports
> rather than an understanding of the code, and so I'd much rather somebody
> who understands the code (that's you ;) deals with it first.
> 
> If the race is benign, then you can annotate the accesses with data_race()
> and add a comment along the lines of your "It won't be torn in practice..."
> paragraph above.

Oh, it's complex enough to reason about that we should definitely use
proper atomics here so that we don't have to think about it.  Also, I'd
concede that the fact that this code has a custom sysctl accessor may
make justify a special case fix.

For most users, it would be better to clip sysctl's wings so that only
atomic accesses are allowed if the default implementation is used.  sysctl
is not a fast path: for single values of fundamental types, there's no
reason I can think of not to use atomics across the board.


> Anyway, this is entirely independent to the manpage effort, just that the
> concurrency wasn't clear to me before I read what you'd written and thought
> I'd mention this before I forget. It's also looking less likely that KCSAN
> is going to land for 5.8, so there's no urgency to this at all.

Sure, and I don't think I thought much beyond "I wonder what happens if
... nah, probably fine, if it mattered then everyone would be doing it."

I'm pretty sure I didn't get that wording out of the C spec.

It's a good spot though, and I may look at a fix if I get around to it.
Can't promise when, though.

Cheers
---Dave

  reply	other threads:[~2020-06-10 12:48 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-27 21:17 [PATCH v2 0/6] prctl.2 man page updates for Linux 5.6 Dave Martin
2020-05-27 21:17 ` Dave Martin
2020-05-27 21:17 ` [PATCH v2 1/6] prctl.2: ffix use literal hyphens when referencing kernel docs Dave Martin
     [not found]   ` <1590614258-24728-2-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-05-28  6:05     ` Michael Kerrisk (man-pages)
2020-05-28  6:05       ` Michael Kerrisk (man-pages)
2020-05-27 21:17 ` [PATCH v2 2/6] prctl.2: Add PR_SPEC_INDIRECT_BRANCH for SPECULATION_CTRL prctls Dave Martin
     [not found]   ` <1590614258-24728-3-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-05-28  7:01     ` Michael Kerrisk (man-pages)
2020-05-28  7:01       ` Michael Kerrisk (man-pages)
2020-06-01 13:51       ` Dave Martin
     [not found]         ` <20200601135112.GB5031-5wv7dgnIgG8@public.gmane.org>
2020-06-09 11:00           ` Michael Kerrisk (man-pages)
2020-06-09 11:00             ` Michael Kerrisk (man-pages)
     [not found] ` <1590614258-24728-1-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-05-27 21:17   ` [PATCH v2 3/6] prctl.2: Add PR_SPEC_DISABLE_NOEXEC " Dave Martin
2020-05-27 21:17     ` Dave Martin
     [not found]     ` <1590614258-24728-4-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-05-28  6:57       ` Michael Kerrisk (man-pages)
2020-05-28  6:57         ` Michael Kerrisk (man-pages)
2020-05-28 13:45       ` Waiman Long
2020-05-28 13:45         ` Waiman Long
2020-05-27 21:17   ` [PATCH v2 4/6] prctl.2: Add SVE prctls (arm64) Dave Martin
2020-05-27 21:17     ` Dave Martin
     [not found]     ` <1590614258-24728-5-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-06-09  9:57       ` Will Deacon
2020-06-09  9:57         ` Will Deacon
2020-06-09 14:11         ` Dave Martin
2020-06-09 14:49           ` Will Deacon
2020-06-10  9:44             ` Dave Martin
2020-06-10  9:44               ` Dave Martin
2020-06-10 10:16               ` Will Deacon
2020-06-10 12:48                 ` Dave Martin [this message]
2020-06-09 11:39       ` Michael Kerrisk (man-pages)
2020-06-09 11:39         ` Michael Kerrisk (man-pages)
     [not found]         ` <77b02e4a-bfcf-90ef-90ca-73e878b7b649-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2020-06-10  9:45           ` Dave Martin
2020-06-10  9:45             ` Dave Martin
2020-05-27 21:17   ` [RFC PATCH v2 6/6] prctl.2: Add tagged address ABI control " Dave Martin
2020-05-27 21:17     ` Dave Martin
     [not found]     ` <1590614258-24728-7-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-06-09 11:04       ` Michael Kerrisk (man-pages)
2020-06-09 11:04         ` Michael Kerrisk (man-pages)
     [not found]         ` <88ac761e-64b3-e1e3-3cdc-1f413a6d69d6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2020-06-09 13:38           ` Will Deacon
2020-06-09 13:38             ` Will Deacon
2020-06-09 17:22     ` Catalin Marinas
     [not found]       ` <20200609172232.GA63286-ryiLQoaaaizILnBEAk/BfazUEOm+Xw19@public.gmane.org>
2020-06-10 10:06         ` Dave Martin
2020-06-10 10:06           ` Dave Martin
     [not found]           ` <20200610100641.GF25945-5wv7dgnIgG8@public.gmane.org>
2020-06-10 15:26             ` Catalin Marinas
2020-06-10 15:26               ` Catalin Marinas
2020-06-10 16:42               ` Dave Martin
     [not found]                 ` <20200610164209.GH25945-5wv7dgnIgG8@public.gmane.org>
2020-06-10 17:42                   ` Catalin Marinas
2020-06-10 17:42                     ` Catalin Marinas
2020-06-15 14:51                     ` Dave Martin
2020-06-15 14:51                       ` Dave Martin
     [not found]                       ` <20200615145115.GL25945-5wv7dgnIgG8@public.gmane.org>
2020-06-24  9:54                         ` Michael Kerrisk (man-pages)
2020-06-24  9:54                           ` Michael Kerrisk (man-pages)
     [not found]                           ` <CAKgNAkgnH7f4bNiF8q-GOY_xz1x9gYnDjMTw=vpR7ONxoL=cdw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-06-24 10:29                             ` Dave Martin
2020-06-24 10:29                               ` Dave Martin
2020-05-27 21:17 ` [PATCH v2 5/6] prctl.2: Add PR_PAC_RESET_KEYS (arm64) Dave Martin
     [not found]   ` <1590614258-24728-6-git-send-email-Dave.Martin-5wv7dgnIgG8@public.gmane.org>
2020-06-09 10:02     ` Will Deacon
2020-06-09 10:02       ` Will Deacon
2020-06-09 11:03       ` Michael Kerrisk (man-pages)
2020-06-09 11:03         ` Michael Kerrisk (man-pages)
2020-06-09 11:36     ` Michael Kerrisk (man-pages)
2020-06-09 11:36       ` Michael Kerrisk (man-pages)
2020-06-09 14:16       ` Dave Martin
2020-06-09 18:11         ` Michael Kerrisk (man-pages)
2020-05-28  7:11 ` [PATCH v2 0/6] prctl.2 man page updates for Linux 5.6 Michael Kerrisk (man-pages)
2020-05-28  7:11   ` Michael Kerrisk (man-pages)

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=20200610124838.GG25945@arm.com \
    --to=dave.martin@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --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).