All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Chen <tim.c.chen@linux.intel.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Andy Lutomirski <luto@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Dave Hansen <dave.hansen@intel.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Andi Kleen <ak@linux.intel.com>,
	Arjan Van De Ven <arjan.van.de.ven@intel.com>,
	David Woodhouse <dwmw@amazon.co.uk>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/8] x86/feature: Detect the x86 IBRS feature to control Speculation
Date: Sun, 7 Jan 2018 09:14:57 -0800	[thread overview]
Message-ID: <700ccc48-d33a-abc0-e5f3-e16f8fba554a@linux.intel.com> (raw)
In-Reply-To: <20180106125633.wu3j4xz7f6w67b3f@pd.tnic>



On 01/06/2018 04:56 AM, Borislav Petkov wrote:
> On Fri, Jan 05, 2018 at 06:12:16PM -0800, Tim Chen wrote:
> 
> <--- This needs an introductory sentence here.
> 
>> cpuid ax=0x7, return rdx bit 26 to indicate presence of this feature
> 
> You can write that as CPUID(7).RDX[26].
> 
>> IA32_SPEC_CTRL (0x48)
>> IA32_SPEC_CTRL, bit0 – Indirect Branch Restricted Speculation (IBRS)
> 
> Ah, those are MSRs. Please say so.
> 
>> 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 RSB
> 
> "RSB" is?

RSB is return stack buffer, basically speculation addresses for return statement.

> 
>> 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
> 
> End sentences with a full stop.
> 
>> * There is no need to clear IBRS before writing it with a value of
>> 1. Unconditionally writing it with a value of 1 after the prediction
>> mode change is sufficient
> 
> This sounds strange. I know of funky MSRs like that but if it is not
> the case here, no need to mention it then.
> 
>> * Note: IBRS is not required in order to isolate branch predictions for
>> SMM or SGX enclaves
>>
>> * Code executed by a sibling logical processor cannot control indirect
>> jump/call/return predicted target when IBRS is set
>>
>> * SMEP will prevent supervisor mode using RSB entries filled by user code;
>> this can reduce the need for software to overwrite RSB entries
>>
>> CPU performance could be reduced when running with IBRS set.
>>
>> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
>> ---
>>  arch/x86/include/asm/cpufeatures.h       | 1 +
>>  arch/x86/include/asm/msr-index.h         | 4 ++++
>>  arch/x86/kernel/cpu/scattered.c          | 1 +
>>  tools/arch/x86/include/asm/cpufeatures.h | 1 +
>>  4 files changed, 7 insertions(+)
>>
>> diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
>> index 07cdd17..5ee0737 100644
>> --- a/arch/x86/include/asm/cpufeatures.h
>> +++ b/arch/x86/include/asm/cpufeatures.h
>> @@ -209,6 +209,7 @@
>>  #define X86_FEATURE_AVX512_4FMAPS	( 7*32+17) /* AVX-512 Multiply Accumulation Single precision */
>>  
>>  #define X86_FEATURE_MBA			( 7*32+18) /* Memory Bandwidth Allocation */
>> +#define X86_FEATURE_SPEC_CTRL		( 7*32+19) /* Control Speculation Control */
>>  
>>  /* Virtualization flags: Linux defined, word 8 */
>>  #define X86_FEATURE_TPR_SHADOW		( 8*32+ 0) /* Intel TPR Shadow */
>> diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
>> index 34c4922..f881add 100644
>> --- a/arch/x86/include/asm/msr-index.h
>> +++ b/arch/x86/include/asm/msr-index.h
>> @@ -42,6 +42,10 @@
>>  #define MSR_PPIN_CTL			0x0000004e
>>  #define MSR_PPIN			0x0000004f
>>  
>> +#define MSR_IA32_SPEC_CTRL		0x00000048
>> +#define SPEC_CTRL_FEATURE_DISABLE_IBRS	(0 << 0)
>> +#define SPEC_CTRL_FEATURE_ENABLE_IBRS	(1 << 0)
> 
> s/_FEATURE//
> 
> SPEC_CTRL_{ENABLE,DISABLE}_IBRS is good enough.
> 
>> +
>>  #define MSR_IA32_PERFCTR0		0x000000c1
>>  #define MSR_IA32_PERFCTR1		0x000000c2
>>  #define MSR_FSB_FREQ			0x000000cd
> ...
> 

Thanks. will update the phrasing.

Tim

  reply	other threads:[~2018-01-07 17:14 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-06  2:12 [PATCH v2 0/8] IBRS patch series Tim Chen
2018-01-06  2:12 ` [PATCH v2 1/8] x86/feature: Detect the x86 IBRS feature to control Speculation Tim Chen
2018-01-06 12:56   ` Borislav Petkov
2018-01-07 17:14     ` Tim Chen [this message]
2018-01-07 18:31       ` Borislav Petkov
2018-01-09 18:13     ` Dave Hansen
2018-01-09 18:55       ` Borislav Petkov
2018-01-08 16:14   ` Paolo Bonzini
2018-01-09 10:39   ` Paolo Bonzini
2018-01-09 17:53     ` Tim Chen
2018-01-09 17:58       ` Paolo Bonzini
2018-01-09 22:59         ` Tim Chen
2018-01-18 23:28   ` Andy Lutomirski
2018-01-06  2:12 ` [PATCH v2 2/8] x86/enter: MACROS to set/clear IBRS Tim Chen
2018-01-07 12:03   ` Borislav Petkov
2018-01-07 17:12     ` Tim Chen
2018-01-07 18:44       ` Borislav Petkov
2018-01-08 22:24     ` Tim Chen
2018-01-06  2:12 ` [PATCH v2 3/8] x86/enter: Use IBRS on syscall and interrupts Tim Chen
2018-01-07 19:27   ` Borislav Petkov
2018-01-06  2:12 ` [PATCH v2 4/8] x86/spec_ctrl: Add sysctl knobs to enable/disable SPEC_CTRL feature Tim Chen
2018-01-06  3:12   ` Dave Hansen
2018-01-08 12:47     ` Peter Zijlstra
2018-01-08 16:14       ` Peter Zijlstra
2018-01-08 17:28         ` Tim Chen
2018-01-08 17:42           ` Peter Zijlstra
2018-01-08 19:34             ` Woodhouse, David
2018-01-08 19:52               ` Lu, Hongjiu
2018-01-09 10:40             ` Thomas Gleixner
2018-01-09 17:55               ` Tim Chen
2018-01-09 18:13                 ` David Woodhouse
2018-01-09 20:31                   ` Tim Chen
2018-01-27 13:59         ` Konrad Rzeszutek Wilk
2018-01-27 14:26           ` David Woodhouse
2018-01-06  8:54   ` Greg KH
2018-01-06 18:10     ` Tim Chen
2018-01-06 21:25       ` Konrad Rzeszutek Wilk
2018-01-07  8:20         ` Greg KH
2018-01-06 14:41   ` Konrad Rzeszutek Wilk
2018-01-06 17:33     ` Dave Hansen
2018-01-06 17:41       ` Van De Ven, Arjan
2018-01-06 19:22         ` Dave Hansen
2018-01-06 19:47           ` Thomas Gleixner
2018-01-06 21:32             ` Konrad Rzeszutek Wilk
2018-01-06 21:34               ` Van De Ven, Arjan
2018-01-06 21:41                 ` Konrad Rzeszutek Wilk
2018-01-06 21:44                   ` Van De Ven, Arjan
2018-01-06 21:39               ` Thomas Gleixner
2018-01-06 21:46                 ` Is: Linus, name for 'spectre' variable. Was:Re: " Konrad Rzeszutek Wilk
2018-01-06 18:23       ` Tim Chen
2018-01-06 18:20     ` Tim Chen
2018-01-08 15:08   ` Peter Zijlstra
2018-01-08 15:29     ` Van De Ven, Arjan
2018-01-08 17:02       ` Tim Chen
2018-01-08 15:11   ` Peter Zijlstra
2018-01-08 15:15   ` Peter Zijlstra
2018-01-08 15:53   ` Peter Zijlstra
2018-01-09  0:29   ` Borislav Petkov
2018-01-09 18:05     ` Tim Chen
2018-01-06  2:12 ` [PATCH v2 5/8] x86/idle: Disable IBRS entering idle and enable it on wakeup Tim Chen
2018-01-06  2:12 ` [PATCH v2 6/8] x86/microcode: Recheck IBRS features on microcode reload Tim Chen
2018-01-06 12:09   ` Woodhouse, David
2018-01-09  0:34   ` Borislav Petkov
2018-01-06  2:12 ` [PATCH v2 7/8] x86: Do not use dynamic IBRS if retpoline is enabled Tim Chen
2018-01-06  2:12 ` [PATCH v2 8/8] x86: Use IBRS for firmware update path Tim Chen
2018-01-06  8:55   ` Greg KH
2018-01-06  8:57   ` Greg KH
2018-01-06  6:43 ` [PATCH v2 0/8] IBRS patch series Tim Chen
2018-01-06 12:00   ` Woodhouse, David
2018-01-06 12:11 ` Woodhouse, David

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=700ccc48-d33a-abc0-e5f3-e16f8fba554a@linux.intel.com \
    --to=tim.c.chen@linux.intel.com \
    --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=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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.