public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Zeng, Star" <star.zeng@intel.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Peter Jones <pjones@redhat.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Dong, Eric" <eric.dong@intel.com>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>,
	 "Yao, Jiewen" <jiewen.yao@intel.com>,
	"Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from RtServicesData memory
Date: Fri, 19 Oct 2018 04:48:16 +0000	[thread overview]
Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BC235A6@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <CAKv+Gu9r_8Qfy1n5EXMUJnQiRqRDiSrKm3gOLXHYQum8E4LABA@mail.gmail.com>

Ok, thanks and got the case.

DxeCapsuleLibVirtualAddressChangeEvent may be too late as it could not allocate pool to do caching.
I meant registering gEfiSystemResourceTableGuid event group notification(installconfigurationtable will trigger event group) and do caching in the notification function.


Thanks,
Star
-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org] 
Sent: Friday, October 19, 2018 12:43 PM
To: Zeng, Star <star.zeng@intel.com>
Cc: Peter Jones <pjones@redhat.com>; edk2-devel@lists.01.org; Dong, Eric <eric.dong@intel.com>; Leif Lindholm <leif.lindholm@linaro.org>; Kinney, Michael D <michael.d.kinney@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>
Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from RtServicesData memory

On 19 October 2018 at 12:39, Zeng, Star <star.zeng@intel.com> wrote:
> Ard,
>
> What is the real case you met that has firmware to access ESRT configuration table at runtime?
>

When called from the OS, UpdateCapsule() crashes when IsFmpCapsule() is invoked, because it attempts to access the ESRT. The driver uses
ConvertPointer() for the address and does not check the return value, so it does not notice the failure.

> I am thinking about a possible solution with current situation.
> The consumer can cache ESRT configuration table by a gEfiSystemResourceTableGuid even group notification.
>

Yes, so you are saying DxeCapsuleLibVirtualAddressChangeEvent () in DxeCapsuleLibFmp/DxeCapsuleRuntime.c should cache the entire table rather than get the address? I suppose that should work.


> -----Original Message-----
> From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
> Sent: Friday, October 19, 2018 11:48 AM
> To: Zeng, Star <star.zeng@intel.com>; Peter Jones <pjones@redhat.com>
> Cc: edk2-devel@lists.01.org; Dong, Eric <eric.dong@intel.com>; Leif 
> Lindholm <leif.lindholm@linaro.org>; Kinney, Michael D 
> <michael.d.kinney@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>
> Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from 
> RtServicesData memory
>
> (+ Peter)
>
> On 19 October 2018 at 11:46, Zeng, Star <star.zeng@intel.com> wrote:
>> Hi Ard,
>>
>> Thanks for the patch.
>>
>> Cc more people who knows ESRT.
>>
>> UEFI 2.7 chapter 23.3:
>> The ESRT shall be stored in memory of type EfiBootServicesData.
>>
>> Seeming, we need update UEFI spec if firmware really needs access ESRT configuration table at runtime.
>>
>>
>> Thanks,
>> Star
>> -----Original Message-----
>> From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
>> Sent: Friday, October 19, 2018 11:25 AM
>> To: edk2-devel@lists.01.org
>> Cc: Zeng, Star <star.zeng@intel.com>; Dong, Eric 
>> <eric.dong@intel.com>; Leif Lindholm <leif.lindholm@linaro.org>; Ard 
>> Biesheuvel <ard.biesheuvel@linaro.org>
>> Subject: Re: [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from 
>> RtServicesData memory
>>
>> On 19 October 2018 at 10:54, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>>> Given that the firmware itself may access the ESRT table when the OS 
>>> invokes the UpdateCapsule () boot service,
>>
>> *runtime* service
>>
>>> it requires a virtual mapping
>>> and so it needs to be allocated from RtServicesData memory.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.1
>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>>> ---
>>>  MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c | 3 ++-
>>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c
>>> b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c
>>> index cab8d69e35ad..66266a44cec9 100644
>>> --- a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c
>>> +++ b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c
>>> @@ -577,7 +577,8 @@ EsrtReadyToBootEventNotify (
>>>      goto EXIT;
>>>    }
>>>
>>> -  EsrtTable = AllocatePool(sizeof(EFI_SYSTEM_RESOURCE_TABLE) + 
>>> NonFmpRepositorySize + FmpRepositorySize);
>>> +  EsrtTable = AllocateRuntimePool (sizeof(EFI_SYSTEM_RESOURCE_TABLE) +
>>> +                                   NonFmpRepositorySize + 
>>> + FmpRepositorySize);
>>>    if (EsrtTable == NULL) {
>>>      DEBUG ((EFI_D_ERROR, "Esrt table memory allocation failure\n"));
>>>      goto EXIT;
>>> --
>>> 2.17.1
>>>

  reply	other threads:[~2018-10-19  4:48 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-19  2:54 [PATCH] MdeModulePkg/EsrtDxe: allocate ESRT table from RtServicesData memory Ard Biesheuvel
2018-10-19  3:24 ` Ard Biesheuvel
2018-10-19  3:46   ` Zeng, Star
2018-10-19  3:48     ` Ard Biesheuvel
2018-10-19  4:39       ` Zeng, Star
2018-10-19  4:43         ` Ard Biesheuvel
2018-10-19  4:48           ` Zeng, Star [this message]
2018-10-19  5:01             ` Ard Biesheuvel
2018-10-19  5:11               ` Ard Biesheuvel
2018-10-19  5:25                 ` Zeng, Star
2018-10-19  5:28                   ` Ard Biesheuvel
2018-10-19  6:01                     ` Zeng, Star

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-list 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=0C09AFA07DD0434D9E2A0C6AEB0483103BC235A6@shsmsx102.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox