> On 19. Apr 2023, at 19:40, Ard Biesheuvel <a...@kernel.org> wrote:
> 
> On Wed, 19 Apr 2023 at 19:14, Marvin Häuser <mhaeu...@posteo.de 
> <mailto:mhaeu...@posteo.de>> wrote:
>> 
>> Hi all,
>> 
>> While testing Ard's suggestion for V3, I noticed I got a broken FD where 
>> ArmReplaceLiveTranslationEntry() is misaligned, but does not cross a 4 KB 
>> boundary.
> 
> Which platform are you building?

ArmVirtPkg / AARCH64 / DEBUG / GCC5 (GCC 12.2.0).

> 
>> To not just hide the issue via this patch, can someone please try to explain 
>> the exact requirements this function has (the comments read like 0x200 was 
>> just the lowest value to guarantee staying within a page)? Why would it be 
>> broken if misaligned, but not crossing a page?
>> 
> 
> 0x200 is a log2 upper bound for the size of the function, so it's just
> the smallest value that fits that requirement, determined manually
> iirc
> 
> And the only reason we have this is that we can cheaply decide whether
> or not unmapping a page will unmap this function or not, but we could
> actually just use the address and size to decide this.
> 
> In any case, if the FD is constructed in a way that violates the
> alignment, there is something wrong with the build tools you are
> using.

The tools are stock edk2, the only changes made are those in the latest commit 
of the linked branch.

> 
>> Is there any chance the FD is somehow misaligned in memory, thus shifting 
>> the function across a page in the process? Or is the FD mapped to a fixed 
>> address like with x86? Is code after ArmReplaceLiveTranslationEntry() 
>> crossing page boundaries the actual issue (and is implicitly fixed by 
>> aligning it)?
>> 
> 
> If you are building ArmVirtQemu.dsc, the FD is mapped at address 0x0
> and the FV is mapped at 0x1000

Then the function simply is not crossing a page boundary... which means the 
patch did fix a valid bug, but it wasn't what actually caused the corruption. 
Any help is appreciated. :)

Best regards,
Marvin

> 
> 
>> For reference, I attached the broken FD. The problematic 
>> ArmReplaceLiveTranslationEntry() is located at MemoryInitPei 0x25C10 - 
>> 0x25D54.
>> This is from my arm_corruption-latest branch: 
>> https://github.com/mhaeuser/edk2/tree/arm_corruption-latest
>> 
>> Best regards,
>> Marvin
>> 
>> 
>> On 18. Apr 2023, at 10:18, Marvin Häuser <mhaeu...@posteo.de 
>> <mailto:mhaeu...@posteo.de>> wrote:
>> 
>> 
>> 
>> On 18. Apr 2023, at 10:10, Ard Biesheuvel <a...@kernel.org 
>> <mailto:a...@kernel.org>> wrote:
>> 
>> On Tue, 18 Apr 2023 at 08:40, Marvin Häuser <mhaeu...@posteo.de 
>> <mailto:mhaeu...@posteo.de>> wrote:
>> 
>> 
>> 
>> On 17. Apr 2023, at 23:18, Ard Biesheuvel <a...@kernel.org 
>> <mailto:a...@kernel.org>> wrote:
>> 
>> Agree with all of this.
>> 
>> And thanks for tracking this down - must not have been fun :-)
>> 
>> 
>> No worries - it wasn’t. :) It was mere luck Vitaly discovered early it was 
>> an issue that triggered based on the binary layout rather than a bug in the 
>> mapping code itself…
>> 
>> Speaking of not fun to track down, I initially wanted to add ASSERTs (yes, 
>> runtime :( ) to check the alignment guarantee is actually met. Leif 
>> basically declined any form of regression-testing at runtime. Do you happen 
>> to have a simple(!) idea for how it could be checked at build-time? (It’s 
>> less about “which commands do I run?†and more about integration with the 
>> build process / BaseTools, cross-OS compatibility, etc.)
>> 
>> 
>> 
>> I think we should just add another align to the code:
>> 
>> .align xx
>> func:
>> 
>> < code >
>> 
>> .align xx
>> .org func + xx
>> 
>> That way, if the code straddles a xx-aligned boundary, the .org will
>> move backwards and force an error.
>> 
>> 
>> Wow, that's pretty fucking smart... I didn't even know that directive was a 
>> thing. I will try to toy with it soon. Do you want it as a separate series, 
>> separate commit in the current series, or squashed into the fix?
>> 
>> 
>> Attachments:
>> 
>> QEMU_EFI.fd
>> 
>> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103233): https://edk2.groups.io/g/devel/message/103233
Mute This Topic: https://groups.io/mt/98325898/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to