Re: [PATCH 4.4 00/18] V4.4 backport of 32-bit arm spectre patches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14/12/2018 16:37, Russell King - ARM Linux wrote:
> On Fri, Dec 14, 2018 at 12:23:48AM -0500, David Long wrote:
>> On 11/23/18 6:09 AM, Marc Zyngier wrote:
>>> Hi Hanjun,
>>>
>>> On 23/11/2018 09:40, Hanjun Guo wrote:
>>>> Hi Marc,
>>>>
>>>> On 2018/11/23 17:10, Marc Zyngier wrote:
>>>>> On 23/11/2018 01:25, Hanjun Guo wrote:
>>>>>> On 2018/10/31 22:04, David Long wrote:
>>>>>>> From: "David A. Long" <dave.long@xxxxxxxxxx>
>>>>>>>
>>>>>>> V4.4 backport of spectre patches from Russell M. King's spectre branch.
>>>>>>> Most KVM patches are excluded. Patches not yet in upstream are excluded.
>>>>>>
>>>>>> I tested this patch set on top of stable 4.4 kernel, running on boards with
>>>>>> A9 and A15 based Hisilicon SoCs, didn't see boot regression and other function
>>>>>> regressions in our CI system,
>>>>>>
>>>>>> Tested-by: Hanjun Guo <hanjun.guo@xxxxxxxxxx>
>>>>>>
>>>>>> Since this patch set didn't include PSCI based hardening for arm32, so
>>>>>> bugfix 6282e916f774 ("ARM: 8809/1: proc-v7: fix Thumb annotation of
>>>>>> cpu_v7_hvc_switch_mm") is not needed for this patch set and this patch
>>>>>> set is in a good shape I think. So what's the plan for this patch set?
>>>>>
>>>>> Well, not having these patches means that a 32bit kernel won't be get
>>>>> any Spectre-v2 mitigation when run as a guest on an arm64 platform. It
>>>>> turns out that this is a pretty common setup among people building large
>>>>> pieces of SW, such as distributions.
>>>>
>>>> I almost miss this point, that makes sense to me :)
>>>>
>>>>>
>>>>> Not having KVM host mitigation on 32bit ARM is probably OK (let's face
>>>>> it, I'm the only user), but not mitigating it as a guest doesn't seem
>>>>> completely OK to me.
>>>>
>>>> We are working on a patch set which is backported from mainline to fix
>>>> ARM64 spectre-v1, spectre-v2 and SSBD for stable 4.4 kernel, and that
>>>> patch set (almost done) has PSCI patches which is needed by 32bit ARM,
>>>> so how about posting those ARM64 spectre fixes then backport all those
>>>> kvm patches for 32bit ARM spectre fix as well?
>>> I'm not sure I get what you mean by PSCI. PSCI is not involved in the
>>> Spectre-v2 mitigation, as we use a specially designed SMC call, relying
>>> on the SMCCC 1.1 infrastructure. Maybe it is what you're referring to here?
>>>
>>> Again, I don't think it is worth the hassle backporting the KVM patches.
>>> What I'd like to see is the guest (and bare metal) support code that
>>> uses the ARCH_WORKAROUND_1 SMCCC 1.1 infrastructure.
>>>
>>> I also don't think it is worth creating an artificial dependency between
>>> the two architectures. Yes, some patches are common (the SMCCC
>>> infrastructure), but that can be easily be solved at merge time. My vote
>>> would be for David to carry the relevant patches in this series.
>>>
>>> Thanks,
>>>
>>> 	M.
>>>
>>
>> Marc,
>>
>> Sorry to be slow in getting back to you on this.
>>
>> As I've been looking at the six or so virtualization-related patches I
>> excluded from the backports for less ancient release streams, for the v4.4
>> stream, I'm having a hard time believing you want the "KVM" patches left
>> out.  Just their subject lines sure make them sound like they would have the
>> guest impact you are worried about.  Here's the ones that worry me from the
>> v4.9 backport:
>>
>> [PATCH 4.9 11/24] ARM: KVM: invalidate BTB on guest exit for Cortex-A12/A17
>> [PATCH 4.9 12/24] ARM: KVM: invalidate icache on guest exit for Cortex-A15
>> [PATCH 4.9 13/24] ARM: spectre-v2: KVM: invalidate icache on guest exit for
>> Brahma B15
>>
>> Are these really not interesting for v4.4, or am I misunderstanding which
>> patches you meant?
> 
> I'm getting the impression that this has completely de-railed the
> backporting effort.
> 
> I'm also wondering if this is actually a good idea.  The 4.4 and 4.9
> 32-bit kernels implement a particularly simple hypervisor, where the
> hypervisor is nothing more than:
> 
> __hyp_stub_do_trap:
>         cmp     r0, #-1
>         mrceq   p15, 4, r0, c12, c0, 0  @ get HVBAR
>         mcrne   p15, 4, r0, c12, c0, 0  @ set HVBAR
>         __ERET

Hypervisor? More like a glorified exception handler, and not something
that can be reached by a guest.

> Would it not be sane to assume that a v4.4 host kernel would support
> a v4.4 guest kernel under virtualisation?  Since this same code is in
> v4.9, the same is true there (it got changed in v4.12).
> 
> If we backport the SMCCC_ARCH_WORKAROUND_1 bits, we end up with an
> incompatibility between the hypervisor code in v4.4 and the guest
> kernel code - the guest kernel will attempt to make a hypervisor call
> with r0=SMCCC_ARCH_WORKAROUND_1, which is 0x80008000.  This will end
> up setting the HVBAR to that value, which is clearly not intended,
> which will end up pointing the hypervisor vectors to that address.

I don't get it. How does the guest issues an HVC if you don't have KVM
installed and running? How does it reach it when KVM is in use?

> Of course, the same will be true if we run a pre-4.12 host kernel
> under a post-4.12 kernel with the SMCCC_ARCH_WORKAROUND_1 hack.
> 
> I forget whether the stable kernels picked up on the changes for this
> hypervisor or not - if not, it isn't a trivial "just make the guest
> use the SMCCC_ARCH_WORKAROUND_1 call."
> 
> I think Marc's of the opinion that he's the only one who runs kernels
> under a 32-bit host kernel - how sure can we be that no one out there
> other than Marc does this?

I'm quite curious to find out. During the 4.19 dev cycle, a KVM-enabled
32bit host kernel would die at boot-time. This was only caught at -rc6.
At that stage, I'm wondering whether it is worth the effort.

> Apart from that, I'm getting very concerned about the amount of time
> the backporting is taking - there are about 40 patches in all, and I
> believe only around half that have so far been backported to any of
> the stable kernels.  We seem to be hung-up on dealing with v4.4 that
> other stable kernels aren't getting the other fixes backported.
> 
> We've seen the stable people attempt to pick up patches from the series
> that make no sense on their own, because the real Spectre fixes don't
> apply because of previous Spectre patches that are missing.
> 
> All the time, we have people using the stable kernels without Spectre
> mitigation in place - and Spectre will have been known about for a
> year next month.

If you want a reduced scope to the mitigation on older kernels, this is
your call.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux