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

Re: [PATCH] xen/efi: Fix Grub2 boot on arm64


  • To: Luca Fancellu <luca.fancellu@xxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 3 Nov 2021 09:20:56 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bgu9c7zjCUhR9ptv/DYh07QJNRGARaSyksN0B1FpRyg=; b=hlSx8T2Y96dWYmP3uQSEZE4Jm7V4nmM0n0Ta5z66WRtc2cvUxAymP+ERi6ZnYmu0jM97yZyVj99hL1zwRpTtj9dAL1FNol4zOKe5a6n3s3FAp5wRGAUsPo69Y2CIz0zhSKwDRiLsN25my6dEeeI5s4GXDNo5Hvi/dHAHhzM3ELh5kRd9rK4+tWfOhiZtG7UpOHRXqyfa+2tBwIW2CSTvSzjiVll6FaTELquE3ql2vZ1j4ib8MTE2qayuNQ1/NO40rWb4mKpwkTvFg56FdEwJCnP4NBe6XwOp5alJpnJrQnl/xY5m5sDWnXHEbkWfPWJS5FJzueeqifV+LFSQFxJXuA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OtWTmUBAyyywEm10nOsgFMLRggIef//J6o/Z1IQfSj1UUAWMLiUv2H1zEsMetLWtTxYCmt8EWa578XJBFGEwpvLJp4+Q4jL4Jd5osWzzI+eFSVSvD96oFGWKmqGJH8ZDU6/EA0fCGUkVtpPgwfWhoZQu/6Xy+4Z37Ae9w6zWTl5UdhxS8s2zGoUMXyEnDpbTLLVNsXngO2rwbplP6u/mDjhj4GAgEM1KAfp9bzVCYOUtqgcdyRX7y0oceIQp13/vWef2FkwvlfSXPpwR3TwVhSBgSKld8l0LTNrI7BMnr4v0Y9lTsCcuSKKi5RXxhZcEG++q7eCsNuJVq5N3z3EylA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Bertrand Marquis <bertrand.marquis@xxxxxxx>, wei.chen@xxxxxxx, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Ian Jackson <iwj@xxxxxxxxxxxxxx>
  • Delivery-date: Wed, 03 Nov 2021 08:21:48 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 02.11.2021 18:12, Luca Fancellu wrote:
>> On 2 Nov 2021, at 14:45, Jan Beulich <jbeulich@xxxxxxxx> wrote:
>> On 02.11.2021 15:05, Luca Fancellu wrote:
>>> The code introduced by commit a1743fc3a9fe9b68c265c45264dddf214fd9b882
>>> ("arm/efi: Use dom0less configuration when using EFI boot") is
>>> introducing a problem to boot Xen using Grub2 on ARM machine using EDK2.
>>>
>>> The problem comes from the function get_parent_handle(...) that inside
>>> uses the HandleProtocol on loaded_image->DeviceHandle, but the last
>>> is NULL, making Xen stop the UEFI boot.
>>
>> According to my reading the UEFI spec doesn't (explicitly) allow for
>> this to be NULL. Could you clarify why this is the case? What other
>> information may end up being invalid / absent? Is e.g. read_section()
>> safe to use?
> 
> My test on an arm machine running Grub2 on top of EDK2 showed that
> when Xen is started, the get_parent_handle(…) call was failing and stopping
> the boot because the efi_bs->HandleProtocol(…) was called with the
> loaded_image->DeviceHandle argument NULL and the call was returning
> a EFI_INVALID_PARAMETER.
> So the parent handle can’t be requested and the filesystem can’t be used,
> but any other code that doesn’t use the handle provided by 
> get_parent_handle(…)
> can be used without problem like read_section(...).

I understand this. My question was for the reason of ->DeviceHandle
being NULL. IOW I'm wondering whether we're actually talking about a
firmware or GrUB bug, in which case your change is a workaround for
that rather than (primarily) a fix for the earlier Xen change.

>>> --- a/xen/common/efi/boot.c
>>> +++ b/xen/common/efi/boot.c
>>> @@ -449,6 +449,13 @@ static EFI_FILE_HANDLE __init 
>>> get_parent_handle(EFI_LOADED_IMAGE *loaded_image,
>>>     CHAR16 *pathend, *ptr;
>>>     EFI_STATUS ret;
>>>
>>> +    /*
>>> +     * If DeviceHandle is NULL, we can't use the 
>>> SIMPLE_FILE_SYSTEM_PROTOCOL
>>> +     * to have access to the filesystem.
>>> +     */
>>> +    if ( !loaded_image->DeviceHandle )
>>> +        return NULL;
>>
>> I couldn't find anything in the spec saying that NULL (a pointer with
>> the numeric value zero) could actually not be a valid handle. Could
>> you point me to text saying so?
> 
> I am reading UEFI spec 2.8 A, section 7.3 Protocol Handler Services, when it 
> talks about
> EFI_BOOT_SERVICES.HandleProtocol() there is a table of “Status Code Returned” 
> listing
> the EFI_INVALID_PARAMETER when the Handle is NULL.

Oh, okay. I guess I didn't search very well.

>>> @@ -1333,6 +1342,9 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
>>> *SystemTable)
>>>             EFI_FILE_HANDLE handle = get_parent_handle(loaded_image,
>>>                                                        &file_name);
>>>
>>> +            if ( !handle )
>>> +                blexit(L"Error retrieving image name: no filesystem 
>>> access");
>>
>> I don't think this should be fatal - see the comment ahead of the
>> enclosing if().
> 
> I’m not sure I get it, I put the fatal condition in part because the handle 
> was dereferenced by
> handle->Close(handle), but also because file_name would have not being 
> modified by the call
> and we have then *argv = file_name.

Instead of you making boot fail I was trying to suggest that you insert
a made-up name ("xen" or "xen.efi"?) alongside issuing just a warning
message.

Jan




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.