All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Poimboeuf <jpoimboe@redhat.com>
To: Andy Lutomirski <luto@kernel.org>
Cc: X86 ML <x86@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
	David Kaplan <David.Kaplan@amd.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Kees Cook <keescook@chromium.org>, Jann Horn <jannh@google.com>
Subject: Re: Do we need to do anything about "dead µops?"
Date: Mon, 3 May 2021 22:16:16 -0500	[thread overview]
Message-ID: <20210504031616.covixup7rhdil3yq@treble> (raw)
In-Reply-To: <CALCETrVwFrpZU-6C=AVurVPk4ahV2yjqyhFeYbL_0OtBNJnZ=w@mail.gmail.com>

On Mon, May 03, 2021 at 06:31:21PM -0700, Andy Lutomirski wrote:
> On Mon, May 3, 2021 at 4:30 PM Josh Poimboeuf <jpoimboe@redhat.com> wrote:
> >
> > On Sat, May 01, 2021 at 09:26:33AM -0700, Andy Lutomirski wrote:
> > > Hi all-
> > >
> > > The "I See Dead µops" paper that is all over the Internet right now is
> > > interesting, and I think we should discuss the extent to which we
> > > should do anything about it.  I think there are two separate issues:
> > >
> > > First, should we (try to) flush the µop cache across privilege
> > > boundaries?  I suspect we could find ways to do this, but I don't
> > > really see the point.  A sufficiently capable attacker (i.e. one who
> > > can execute their own code in the dangerous speculative window or one
> > > who can find a capable enough string of gadgets) can put secrets into
> > > the TLB, various cache levels, etc.  The µop cache is a nice piece of
> > > analysis, but I don't think it's qualitatively different from anything
> > > else that we don't flush.  Am I wrong?
> >
> > Wouldn't this type of gadget (half-v1 gadget + value-dependent-branch)
> > would be much more likely to occur than a traditional Spectre v1
> > (half-v1 gadget + value-addressed-load)?
> 
> I don't fully believe this.  It's certainly the case that:
> 
> if (mispredicted as false)
>   return;
> secret = some_secret();
> if (secret == 42)
>   do_something();

Well, obviously we should never write secret-protecting code in that
manner.

I was actually thinking more along the lines of

	val = 0;

	if (user_supplied_idx < ARRAY_SIZE) // trained to speculatively be 'true'
		val = boring_non_secret_array[user_supplied_idx];

	if (val & 1)
		do_something();

In other words, the victim code wouldn't be accessing the secret
intentionally.  So there's no reason for it to avoid doing
data-dependent branches.

> will leak the fact that the secret is 42 into the µop cache, but it
> will also leak it into the icache and lots of other things.  I see
> nothing new here.

Hm, I suppose.  I don't think I'd ever considered that vector though.

All the more reason to mask usercopy addresses...

-- 
Josh


  reply	other threads:[~2021-05-04  3:16 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-01 16:26 Do we need to do anything about "dead µops?" Andy Lutomirski
2021-05-01 17:35 ` Andrew Cooper
2021-05-03 23:30 ` Josh Poimboeuf
2021-05-04  1:31   ` Andy Lutomirski
2021-05-04  3:16     ` Josh Poimboeuf [this message]
2021-05-04 13:06       ` David Laight
2021-05-04 13:24         ` Josh Poimboeuf

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=20210504031616.covixup7rhdil3yq@treble \
    --to=jpoimboe@redhat.com \
    --cc=David.Kaplan@amd.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=dwmw2@infradead.org \
    --cc=jannh@google.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=x86@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.