I think adding the assert makes sense and makes the same issue to be caught 
easily in the further, could you help file a bugzilla bug to track it?

Thanks,
Star
-----Original Message-----
From: Sean Brogan [mailto:sean.bro...@microsoft.com] 
Sent: Saturday, October 22, 2016 12:40 AM
To: Zeng, Star <star.z...@intel.com>; Gao, Liming <liming....@intel.com>; 
edk2-devel@lists.01.org
Subject: RE: [edk2] question about a compressed Ffs3 file inside FFS2 filesystem

Star,  

Thanks.  That was the issue and that fixed the problem.   How about adding an 
assert in PeiServicesLib?  

MdePkg\Library\PeiServicesLib\PeiServicesLib.c ~ line 642 

add the assert for the else case.  

if (FvFormat != NULL) {
    CopyGuid (&FvInfoPpi->FvFormat, FvFormat);
  } else {
    CopyGuid (&FvInfoPpi->FvFormat, &gEfiFirmwareFileSystem2Guid);
    //Since FileSystem 2 is being assumed check the FV
    //Check that the File system matches.  
    ASSERT(CompareGuid(&(((EFI_FIRMWARE_VOLUME_HEADER 
*)FvInfo)->FileSystemGuid), &gEfiFirmwareFileSystem2Guid));
  }


Thanks again
Sean


This email message may contain confidential and privileged information.  Any 
unauthorized use is prohibited.  If you are not the intended recipient, please 
contact the sender by reply email and destroy all copies of the original 
message.

> -----Original Message-----
> From: Zeng, Star [mailto:star.z...@intel.com]
> Sent: Thursday, October 20, 2016 6:02 PM
> To: Sean Brogan <sean.bro...@microsoft.com>; Gao, Liming 
> <liming....@intel.com>; edk2-devel@lists.01.org
> Cc: Zeng, Star <star.z...@intel.com>
> Subject: RE: [edk2] question about a compressed Ffs3 file inside FFS2 
> filesystem
> 
> Sean,
> 
> I guess the codes are reporting FvInfo PPI like below that makes the 
> problem.
> 
>       PeiServicesInstallFvInfoPpi(
>         NULL,
>         (VOID *)PcdGet32(PcdFlashFvXXXBase),
>         PcdGet32(PcdFlashFvXXXSize),
>         NULL,
>         NULL
>         );
> 
> PeiServicesInstallFvInfoPpi() has below comments for FvFormat parameter.
>   @param  FvFormat             Unique identifier of the format of the memory-
> mapped
>                                firmware volume.  This parameter is optional 
> and
>                                may be NULL.  If NULL is specified, the
>                                *EFI_FIRMWARE_FILE_SYSTEM2_GUID* format is 
> assumed.
> 
> I suggest the codes can be updated to:
> 
>       PeiServicesInstallFvInfoPpi(
>         &(((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) 
> PcdGet32(PcdFlashFvXXXBase))->FileSystemGuid),
>         (VOID *)PcdGet32(PcdFlashFvXXXBase),
>         PcdGet32(PcdFlashFvXXXSize),
>         NULL,
>         NULL
>         );
> 
> Thanks,
> Star
> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
> Sean Brogan
> Sent: Thursday, October 20, 2016 10:49 PM
> To: Gao, Liming <liming....@intel.com>; edk2-devel@lists.01.org
> Subject: Re: [edk2] question about a compressed Ffs3 file inside FFS2 
> filesystem
> 
> Liming,
> 
> Good catch not sure how that happened. Unfortunately now the problem 
> doesn't make sense.  The code should have IsFfs3Fv = True and the 
> debug message that indicates the code path which ignores the section 
> should not get executed.  I'll look at it again today as the problem 
> still exists, just my analysis is incorrect.
> 
> Current workaround is to make sure FFS2 sizes and guids are used 
> everywhere so a problem with FFS3 is lurking somewhere.
> 
> Thanks
> Sean
> 
> 
> > -----Original Message-----
> > From: Gao, Liming [mailto:liming....@intel.com]
> > Sent: Thursday, October 20, 2016 1:27 AM
> > To: Sean Brogan <sean.bro...@microsoft.com>; edk2-devel@lists.01.org
> > Subject: RE: [edk2] question about a compressed Ffs3 file inside 
> > FFS2 filesystem
> >
> > Sean:
> >   In MdePkg.dec, gEfiFirmwareFileSystem2Guid and 
> > gEfiFirmwareFileSystem3Guid are defined below.
> >   gEfiFirmwareFileSystem2Guid     = { 0x8c8ce578, 0x8a3d, 0x4f1c, { 0x99,
> 0x35,
> > 0x89, 0x61, 0x85, 0xc3, 0x2d, 0xd3 }}
> > gEfiFirmwareFileSystem3Guid      = { 0x5473c07a, 0x3dcb, 0x4dca, { 0xbd,
> 0x6f,
> > 0x1e, 0x96, 0x89, 0xe7, 0x34, 0x9a }}
> >
> >   From the dump message, the root FV File System ID is
> > 5473c07a-3dcb-4dca- bd6f-1e9689e7349a. It is FF3 file system.
> >
> > Thanks
> > Liming
> > > -----Original Message-----
> > > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On 
> > > Behalf Of Sean Brogan
> > > Sent: Thursday, October 20, 2016 7:09 AM
> > > To: edk2-devel@lists.01.org
> > > Subject: [edk2] question about a compressed Ffs3 file inside FFS2 
> > > filesystem
> > >
> > > We have a condition that occurs when we boot where we see the 
> > > following message and our boot fails because of it.
> > > DEBUG ((EFI_D_ERROR, "Found a FFS3 formatted section in a non-FFS3 
> > > formatted FV.\n"));
> > >
> > > Which is on line 773 of FwVol.c
> > > (
> https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Pe
> > > i/FwVol/FwVol.c )
> > >
> > > The condition is caused by a large firmware volume (greater than
> > > 16mb) that is compressed and put into a smaller FV (less than 16mb).
> > > My question is why isn't this allowed (seems like a valid scenario).
> > > Volinfo supports this and decodes binary fine.  The PI Vol 3 spec 
> > > has a section 3.2.2 EFI_FIRMWARE_FILE_SYSTEM3_GUID which says
> > > FileSystem2 doesn't support large files but it seems that the code 
> > > is not taking into account that the section is compressed and 
> > > therefore you can have a large file inside a compressed section 
> > > inside a
> FV with File System2.
> > >
> > > Feedback/thoughts/comments/Bug?
> > >
> > > Here are some details of my scenario.
> > > Compressed FV has filesystem == 8c8ce578-8a3d-4f1c-9935-
> 896185c32dd3
> > > (ffs3)
> > > Non compressed FV has filesystem == 5473c07a-3dcb-4dca-bd6f- 
> > > 1e9689e7349a (ffs2)
> > >
> > > VolInfo dump of the Non Compressed FV showing the
> nested/compressed
> > > FV inside.
> > >
> > > Decoding
> > > VolInfo Version 1.0 Build Build 20909
> > > Signature:        _FVH (4856465F)
> > > Attributes:       4FEFF
> > >        EFI_FVB2_READ_DISABLED_CAP
> > >        EFI_FVB2_READ_ENABLED_CAP
> > >        EFI_FVB2_READ_STATUS
> > >        EFI_FVB2_WRITE_DISABLED_CAP
> > >        EFI_FVB2_WRITE_ENABLED_CAP
> > >        EFI_FVB2_WRITE_STATUS
> > >        EFI_FVB2_LOCK_CAP
> > >        EFI_FVB2_LOCK_STATUS
> > >        EFI_FVB2_STICKY_WRITE
> > >        EFI_FVB2_MEMORY_MAPPED
> > >        EFI_FVB2_ERASE_POLARITY
> > >        EFI_FVB2_READ_LOCK_CAP
> > >        EFI_FVB2_READ_LOCK_STATUS
> > >        EFI_FVB2_WRITE_LOCK_CAP
> > >        EFI_FVB2_WRITE_LOCK_STATUS
> > >         EFI_FVB2_ALIGNMENT_16
> > >         EFI_FVB2_ALIGNMENT_32
> > >         EFI_FVB2_ALIGNMENT_64
> > >         EFI_FVB2_ALIGNMENT_128
> > >         EFI_FVB2_ALIGNMENT_4K
> > >         EFI_FVB2_ALIGNMENT_8K
> > >         EFI_FVB2_ALIGNMENT_16K
> > >         EFI_FVB2_ALIGNMENT_32K
> > >         EFI_FVB2_ALIGNMENT_1M
> > >         EFI_FVB2_ALIGNMENT_2M
> > >        EFI_FVB2_ALIGNMENT_4M
> > >         EFI_FVB2_ALIGNMENT_8M
> > >         EFI_FVB2_ALIGNMENT_256M
> > >         EFI_FVB2_ALIGNMENT_512M
> > >         EFI_FVB2_ALIGNMENT_1G
> > >         EFI_FVB2_ALIGNMENT_2G
> > > Header Length:         0x00000048
> > > File System ID:        5473c07a-3dcb-4dca-bd6f-1e9689e7349a
> > > Revision:              0x0002
> > > Number of Blocks:      0x00000028
> > > Block Length:          0x00010000
> > > Total Volume Size:     0x00280000
> > >
> ==========================================================
> > > ==
> > > File Name:        9E21FD93-9C72-4C15-8C4B-E77F1DB2D792
> > > File Offset:      0x00000048
> > > File Length:      0x001F3FFD
> > > File Attributes:  0x00
> > > File State:       0xF8
> > >         EFI_FILE_DATA_VALID
> > > File Type:        0x0B  EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
> > > ------------------------------------------------------------
> > >   Type:  EFI_SECTION_GUID_DEFINED
> > >   Size:  0x001F3FE5
> > >   SectionDefinitionGuid:  ee4e5898-3914-4259-9d6e-dc7bd79403cf
> > >
> > >   DataOffset:             0x0018
> > >   Attributes:             0x0001
> > > ------------------------------------------------------------
> > >   Type:  EFI_SECTION_RAW
> > >   Size:  0x00000FF8
> > > ------------------------------------------------------------
> > >   Type:  EFI_SECTION_FIRMWARE_VOLUME_IMAGE
> > >   Size:  0x01010008
> > >
> ==========================================================
> > > ==
> > >
> > > Thanks
> > > Sean
> > > _______________________________________________
> > > edk2-devel mailing list
> > > edk2-devel@lists.01.org
> > > https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to