Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1572037
| From | Jeffrey Hugo <jhugo@codeaurora.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() |
| Date | 2017-02-02 00:00 +0100 |
| Message-ID | <t6c2B-3RH-7@gated-at.bofh.it> (permalink) |
| References | <t67cC-tm-25@gated-at.bofh.it> <t67cC-tm-27@gated-at.bofh.it> <t6ak9-2Pd-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On 2/1/2017 2:08 PM, Jeffrey Hugo wrote:
> On 2/1/2017 10:45 AM, Ard Biesheuvel wrote:
>> Some AArch64 UEFI implementations disable the MMU in ExitBootServices(),
>> after which unaligned accesses to RAM are no longer supported.
>>
>> Commit abfb7b686a3e ("efi/libstub/arm*: Pass latest memory map to the
>> kernel") fixed an issue in the memory map handling of the stub FDT code,
>> but inadvertently created an issue with such firmwares, by moving some
>> of the FDT manipulation to after the invocation of ExitBootServices().
>> Given that the stub's libfdt implementation uses the ordinary,
>> accelerated
>> string functions, which rely on hardware handling of unaligned accesses,
>> manipulating the FDT with the MMU off may result in alignment faults.
>>
>> So fix the situation by moving the update_fdt_memmap() call into the
>> callback function invoked by efi_exit_boot_services() right before it
>> calls the ExitBootServices() UEFI service (which is arguably a better
>> place for it anyway)
>>
>> Note that disabling the MMU in ExitBootServices() is not compliant with
>> the UEFI spec, and carries great risk due to the fact that switching from
>> cached to uncached memory accesses halfway through compiler generated
>> code
>> (i.e., involving a stack) can never be done in a way that is
>> architecturally
>> safe.
>>
>> Cc: <stable@vger.kernel.org>
>> Fixes: abfb7b686a3e ("efi/libstub/arm*: Pass latest memory map to the
>> kernel")
>> Tested-by: Riku Voipio <riku.voipio@linaro.org>
>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>
> NACK, please. This causes a regression on my platform, in the form of
> an assert in UEFI once ExitBootServices() is called, per initial
> testing. I'll do more testing to determine why.
>
Sorry, false alarm. The assert appears to have been the result of a bad
tree and a bad target configuration, and was not reproduced on another
setup, nor did the assert make sense in context with this change.
I withdraw my NACK.
--
Jeffrey Hugo
Qualcomm Datacenter Technologies as an affiliate of Qualcomm
Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2017-02-01 18:50 +0100
Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Ingo Molnar <mingo@kernel.org> - 2017-02-01 20:10 +0100
Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2017-02-01 20:30 +0100
Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Ingo Molnar <mingo@kernel.org> - 2017-02-01 21:20 +0100
Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Jeffrey Hugo <jhugo@codeaurora.org> - 2017-02-01 22:10 +0100
Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Jeffrey Hugo <jhugo@codeaurora.org> - 2017-02-02 00:00 +0100
Re: [PATCH] efi: fdt: avoid FDT manipulation after ExitBootServices() Ard Biesheuvel <ard.biesheuvel@linaro.org> - 2017-02-02 17:20 +0100
[tip:efi/urgent] efi/fdt: Avoid FDT manipulation after ExitBootServices() tip-bot for Ard Biesheuvel <tipbot@zytor.com> - 2017-02-02 02:40 +0100
csiph-web