From: Ingo Molnar <mingo@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linuxfoundation.org>,
x86@kernel.org, Peter Zijlstra <peterz@infradead.org>,
Borislav Petkov <bp@alien8.de>,
David Woodhouse <dwmw@amazon.co.uk>,
Tim Chen <tim.c.chen@linux.intel.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Andi Kleen <ak@linux.intel.com>,
Greg KH <gregkh@linuxfoundation.org>,
Dave Hansen <dave.hansen@intel.com>,
Andy Lutomirski <luto@kernel.org>,
Arjan Van De Ven <arjan.van.de.ven@intel.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [patch RFC 4/5] x86/cpufeatures: Detect Speculation control feature
Date: Wed, 10 Jan 2018 07:32:11 +0100 [thread overview]
Message-ID: <20180110063211.z6w55gwxm5szmt2l@gmail.com> (raw)
In-Reply-To: <20180110011350.759392067@linutronix.de>
* Thomas Gleixner <tglx@linutronix.de> wrote:
> From: Tim Chen <tim.c.chen@linux.intel.com>
>
> CPUs can expose a MSR to control speculation. The initial function of this
> MSR is to control Indirect Branch Speculation, which is required to
> mitigate the Spectre_V2 attack on certain CPU generations.
s/a MSR
/an MSR
> If CPUID(7).RDX[26] is set then MSR_IA32_SPEC_CTRL (0x48) is available and
> bit 0 of that MSR controls whether Indirect Branch Speculation is
> restricted or not. The control bit is named IBRS (Indirect Branch
> Restricted Speculation). The IBSR bit can be unconditionally set to 1
> without clearing it before.
Argh for inverted logic: why was the control bit defined for a _negated_ value,
i.e. why does '0' mean "don't don't speculate"?
And yes, I know what's behind it: this way 'IBRS' can be called a 'mitigation
feature' that can be 'enabled', instead of calling it a 'broken CPU feature
feature' that has to be disabled ...
That's nonsense that causes confusion to no end:
> If IBRS is set, near returns and near indirect jumps/calls will not allow
> their predicted target address to be controlled by code that executed in a
> less privileged prediction mode before the IBRS mode was last written with
> a value of 1 or on another logical processor so long as all Return Stack
> Buffer (RSB) entries from the previous less privileged prediction mode are
> overwritten.
>
> Thus a near indirect jump/call/return may be affected by code in a less
> privileged prediction mode that executed AFTER IBRS mode was last written
> with a value of 1.
>
> Code executed by a sibling logical processor cannot control indirect
> jump/call/return predicted target when IBRS is set
>
> IBRS is not required in order to isolate branch predictions for SMM or SGX
> enclaves.
>
> Enabling IBRS can cause a measurable and depending on the workload
> significant CPU performance penalty.
This is bound to be really confusing due to the logic negation, in particular:
> +#define SPEC_CTRL_DISABLE_IBRS (0UL << 0)
> +#define SPEC_CTRL_ENABLE_IBRS (1UL << 0)
"SPEC_CTRL_ENABLE_IBRS" will _disable_ speculation!
Then that brokenness is propagated into higher code as well by the next patch,
i.e. "SPECTRE_V2_CMD_IBRS" et al.
This is totally brain-dead and should be inverted to follow natural logic instead.
The lowest level hardware ABI will obviously stay broken,
Why not define a sane name instead? Something like:
CTRL_DISABLE_BR_SPECULATION
CTRL_ENABLE_BR_SPECULATION
and only explain the broken negated Intel naming and flag once in the comments for
the definition and the lowest level MSR write.
Thanks,
Ingo
next prev parent reply other threads:[~2018-01-10 6:32 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 1:06 [patch RFC 0/5] x86/spectre_v2: Initial integration of IBRS into the spectre_v2 mechanics Thomas Gleixner
2018-01-10 1:06 ` [patch RFC 1/5] x86/CPU: Sync CPU feature flags late Thomas Gleixner
2018-01-10 1:37 ` Dave Hansen
2018-01-10 1:39 ` Van De Ven, Arjan
2018-01-10 1:47 ` Thomas Gleixner
2018-01-10 2:57 ` Andy Lutomirski
2018-01-10 11:02 ` Thomas Gleixner
2018-01-10 1:44 ` Thomas Gleixner
2018-01-10 6:20 ` Ingo Molnar
2018-01-10 11:33 ` Borislav Petkov
2018-01-10 12:38 ` Thomas Gleixner
2018-01-10 1:06 ` [patch RFC 2/5] x86/spectre: Simplify spectre code a bit Thomas Gleixner
2018-01-10 6:22 ` Ingo Molnar
2018-01-10 1:06 ` [patch RFC 3/5] x86/spectre: Prepare for IBRS selection Thomas Gleixner
2018-01-10 1:51 ` Dave Hansen
2018-01-10 1:06 ` [patch RFC 4/5] x86/cpufeatures: Detect Speculation control feature Thomas Gleixner
2018-01-10 6:32 ` Ingo Molnar [this message]
2018-01-10 11:06 ` Thomas Gleixner
2018-01-10 1:06 ` [patch RFC 5/5] x86/speculation: Add basic speculation control code Thomas Gleixner
2018-01-10 2:02 ` Dave Hansen
2018-01-10 4:11 ` Justin Forbes
2018-01-10 9:22 ` Peter Zijlstra
2018-01-10 9:27 ` David Woodhouse
2018-01-10 10:03 ` Peter Zijlstra
2018-01-10 11:22 ` David Woodhouse
2018-01-10 11:41 ` Thomas Gleixner
2018-01-10 11:45 ` Peter Zijlstra
2018-01-10 11:54 ` Andrea Arcangeli
2018-01-10 11:58 ` David Woodhouse
2018-01-10 12:01 ` Andrea Arcangeli
2018-01-10 12:07 ` Andrea Arcangeli
2018-01-10 12:12 ` David Woodhouse
2018-01-10 12:20 ` Andrea Arcangeli
2018-01-10 12:27 ` Andrea Arcangeli
2018-01-10 13:42 ` Van De Ven, Arjan
2018-01-10 12:09 ` David Woodhouse
2018-01-10 12:17 ` Andrea Arcangeli
2018-01-10 12:29 ` David Woodhouse
2018-01-10 12:41 ` Andrea Arcangeli
2018-01-10 12:47 ` Jiri Kosina
2018-01-10 12:51 ` David Woodhouse
2018-01-10 13:02 ` Andrea Arcangeli
2018-01-10 13:05 ` Andrea Arcangeli
2018-01-10 13:10 ` Andrea Arcangeli
2018-01-10 13:12 ` Andrea Arcangeli
2018-01-10 12:57 ` Andrea Arcangeli
2018-01-10 13:07 ` David Woodhouse
2018-01-10 13:45 ` Van De Ven, Arjan
2018-01-10 13:52 ` Andrea Arcangeli
2018-01-10 13:53 ` Van De Ven, Arjan
2018-01-10 21:35 ` Tim Chen
2018-01-10 22:13 ` Andrea Arcangeli
2018-01-10 13:46 ` Thomas Gleixner
2018-01-10 13:51 ` Van De Ven, Arjan
2018-01-10 13:53 ` Thomas Gleixner
2018-01-10 13:58 ` David Woodhouse
2018-01-10 14:10 ` Andrea Arcangeli
2018-01-10 14:14 ` Van De Ven, Arjan
2018-01-10 14:59 ` Dave Hansen
2018-01-10 15:13 ` Andrea Arcangeli
2018-01-10 15:24 ` David Woodhouse
2018-01-10 15:47 ` Andrea Arcangeli
2018-01-10 15:56 ` David Woodhouse
2018-01-10 13:10 ` Jiri Kosina
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=20180110063211.z6w55gwxm5szmt2l@gmail.com \
--to=mingo@kernel.org \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=arjan.van.de.ven@intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@intel.com \
--cc=dwmw@amazon.co.uk \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=torvalds@linux-foundation.org \
--cc=torvalds@linuxfoundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®