On 06/24/16 06:39, Gary Lin wrote: > On Fri, Jun 24, 2016 at 10:19:30AM +0800, Gary Lin wrote: >> On Thu, Jun 23, 2016 at 02:57:49PM +0200, Laszlo Ersek wrote: >>> On 06/23/16 06:43, Gary Lin wrote: >>>> On Wed, Jun 22, 2016 at 07:24:32PM +0200, Laszlo Ersek wrote: >>>>> Gary, >>>>> >>>>> On 06/22/16 17:33, Laszlo Ersek wrote: >>>>> >>>>> can you please retest with a fresh build of the current iPXE master (at >>>>> 04186319181298083ef28695a8309028b26fe83c presently)? I can no longer >>>>> reproduce the ASSERT -- the iPXE form can be entered just fine. >>>>> >>>>> I don't know what changed. o_O >>>>> >>>> I still got the crash all the time with 0418631918. However, Switching >>>> to cc8824ad (plus the size fix) lowers the chance of crash largerly >>>> (around 1 from 10). cc8824ad is the commit that is right before this: >>>> >>>> 5238c85b623200fa0f44a46db93965080053f745 >>>> [efi] Work around broken EFI HII specification >>>> >>>> The iPXE option started to crash all the time after I switched to >>>> 5238c85b6. However, reverting 5238c85b6 on git master didn't moderate >>>> the crash. The root cause is still hiding somewhere... >>> >>> If it reproduces non-deterministically, that's quite bad. If we don't >>> have a reliable reproducer, I'm not sure how it can be analyzed. >>> >> In my case: >> >> ipxe git 04186319 -> always crash >> ipxe git cc8824ad -> 10% crash >> >> I had some findings by comparing the crash and non-crash log with cc8824ad. >> >> 1. For the non-crash case, all the Statement->ParentStatement of the iPXE >> options were NULL in InitializeDisplayStatement(). >> >> 2. For the crash case, one of the Scope of the iPXE Statement became >> non-zero, so >> MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c:ParseOpCodes() >> assigned CurrentStatement to ParentStatement. When this happened, >> it's always the statement for "TFTP server". >> > > It seems that iPXE didn't initialize Scope, so the value was assigned > randomly (sort of). > > diff --git a/src/interface/efi/efi_hii.c b/src/interface/efi/efi_hii.c > index 0ea970e..4b5aa9a 100644 > --- a/src/interface/efi/efi_hii.c > +++ b/src/interface/efi/efi_hii.c > @@ -119,6 +119,7 @@ static void * efi_ifr_op ( struct efi_ifr_builder *ifr, > unsigned int opcode, > /* Fill in opcode header */ > op->OpCode = opcode; > op->Length = len; > + op->Scope = 0; > > return op; > } > > After applying this patch, the crash never happened again.
Awesome! Can you please send this patch to ipxe-devel? (Although I can see Michael is on the address list anyway -- good!) Thanks! Laszlo _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel