<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 8, 2021, at 9:06 AM, Marvin Häuser <<a href="mailto:mhaeuser@posteo.de" class="">mhaeuser@posteo.de</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta charset="UTF-8" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">We use the loader code in userspace anyway for fuzzing and such. I also want to build a database of all sorts of UEFI binaries some time before the merge to confirm they are all accepted (Windows / macOS / Linux bootloaders, tools like memtest, drivers like iPXE). As part of that, I'm sure we can have a userspace tool that uses the code to emit parsing information.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">But as the EDK II build system is very... not so userspace friendly, I will not promise it will be very nice. :)</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""></div></blockquote><div><br class=""></div><div>Marvin,</div><div><br class=""></div><div>The BaseTools can easily build C command line tools that are cross platform?</div><div><br class=""></div><div>Actually GenFw [1] already does a lot of PE/COFF magic, so it should be relatively easy to add a -I, —info, and dump out an overview of a PE/COFF image, and make comments on things that are not secure. It would also probably be useful to dump out information about the Debug Directory entries, His sections, etc. for general debug.</div><div><br class=""></div><div>[1] <a href="https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/GenFw" class="">https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/GenFw</a></div><div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(47, 180, 29);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #b42419" class="">/Volumes/Case/edk2-github</span><span style="font-variant-ligatures: no-common-ligatures" class="">(eng/PR-557-XcodeResourceSections)</span><span style="font-variant-ligatures: no-common-ligatures; color: #9fa01c" class="">></span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">. edksetup.sh</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">Loading previous configuration from /Volumes/Case/edk2-github/Conf/BuildEnv.sh</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">WORKSPACE: /Volumes/Case/edk2-github</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">EDK_TOOLS_PATH: /Volumes/Case/edk2-github/BaseTools</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">CONF_PATH: /Volumes/Case/edk2-github/Conf</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(47, 180, 29);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #b42419" class="">/Volumes/Case/edk2-github</span><span style="font-variant-ligatures: no-common-ligatures" class="">(eng/PR-557-XcodeResourceSections)</span><span style="font-variant-ligatures: no-common-ligatures; color: #9fa01c" class="">></span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">GenFw -h</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">GenFw Version 0.2 Developer Build based on Revision: Unknown </span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">Usage: GenFw [options] <input_file></span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">Options:</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -o FileName, --outputfile FileName</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        File will be created to store the output content.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -e EFI_FILETYPE, --efiImage EFI_FILETYPE</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        Create Efi Image. EFI_FILETYPE is one of BASE,SMM_CORE,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        PEI_CORE, PEIM, DXE_CORE, DXE_DRIVER, UEFI_APPLICATION,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        SEC, DXE_SAL_DRIVER, UEFI_DRIVER, DXE_RUNTIME_DRIVER,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        DXE_SMM_DRIVER, SECURITY_CORE, COMBINED_PEIM_DRIVER,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        MM_STANDALONE, MM_CORE_STANDALONE,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        PIC_PEIM, RELOCATABLE_PEIM, BS_DRIVER, RT_DRIVER,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        APPLICATION, SAL_RT_DRIVER to support all module types</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can only be used together with --keepexceptiontable,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        --keepzeropending, --keepoptionalheader, -r, -o option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It is a action option. If it is combined with other action options,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        the later input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -c, --acpi            Create Acpi table.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o, -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -t, --terse           Create Te Image.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can only be used together with --keepexceptiontable,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        --keepzeropending, --keepoptionalheader, -r, -o option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It is a action option. If it is combined with other action options,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        the later input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -u, --dump            Dump TeImage Header.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o, -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -z, --zero            Zero the Debug Data Fields in the PE input image file.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It also zeros the time stamp fields.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option can be used to compare the binary efi image.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o, -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -b, --exe2bin         Convert the input EXE to the output BIN file.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o, -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -l, --stripped        Strip off the relocation info from PE or TE image.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o, -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -s timedate, --stamp timedate</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        timedate format is "yyyy-mm-dd 00:00:00". if timedata </span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        is set to NOW, current system time is used. The support</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        date scope is 1970-01-01 00+timezone:00:00</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        ~ 2038-01-19 03+timezone:14:07</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        The scope is adjusted according to the different zones.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o, -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -m, --mcifile         Convert input microcode txt file to microcode bin file.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -j, --join            Combine multi microcode bin files to one file.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can be specified with -a, -p, -o option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        No other options can be combined with it.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -a NUM, --align NUM   NUM is one HEX or DEC format alignment value.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option is only used together with -j option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -p NUM, --pad NUM     NUM is one HEX or DEC format padding value.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option is only used together with -j option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --keepexceptiontable  Don't clear exception table.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option can be used together with -e or -t.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It doesn't work for other options.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --keepoptionalheader  Don't zero PE/COFF optional header fields.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option can be used together with -e or -t.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It doesn't work for other options.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --keepzeropending     Don't strip zero pending of .reloc.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option can be used together with -e or -t.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It doesn't work for other options.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -r, --replace         Overwrite the input file with the output content.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If more input files are specified,</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        the last input file will be as the output file.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -g HiiPackageListGuid, --hiiguid HiiPackageListGuid</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        Guid is used to specify hii package list guid.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        Its format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If not specified, the first Form FormSet guid is used.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --hiipackage          Combine all input binary hii packages into </span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        a single package list as the text resource data(RC).</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --hiibinpackage       Combine all input binary hii packages into </span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        a single package list as the binary resource section.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --rc FlieName         Append a Hii resource section to the</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        last PE/COFF section. The FileName is the resource section to append</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If FileName does not exist this operation is skipped. This feature is</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        only intended for toolchains, like XCODE, that don't suport $(RC).</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        This option can only be combined with -e</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --rebase NewAddress   Rebase image to new base address. New address </span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        is also set to the first none code section header.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o or -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --address NewAddress  Set new address into the first none code </span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        section header of the input image.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        It can't be combined with other action options</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        except for -o or -r option. It is a action option.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        If it is combined with other action options, the later</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">                        input action option will override the previous one.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -v, --verbose         Turn on verbose output with informational messages.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -q, --quiet           Disable all messages except key message and fatal error</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -d, --debug level     Enable debug messages, at input debug level.</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  --version             Show program's version number and exit</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  -h, --help            Show this help message and exit</span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div></div><div>Thanks,</div><div><br class=""></div><div>Andrew Fish</div><br class=""><blockquote type="cite" class=""><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Best regards,</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Marvin</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On 08.04.21 16:13, Andrew (EFI) Fish wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">At a minimum it would be nice if we had a tool that would point out the security faults with a given PE/COFF file layout.<br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class="">On Apr 8, 2021, at 4:16 AM, Laszlo Ersek <<a href="mailto:lersek@redhat.com" class="">lersek@redhat.com</a>> wrote:<br class=""><br class="">On 04/06/21 12:06, Marvin Häuser wrote:<br class=""><blockquote type="cite" class="">Good day Nate,<br class=""><br class="">Comments are inline.<br class=""><br class="">Best regards,<br class="">Marvin<br class=""><br class=""><blockquote type="cite" class="">On 06.04.21 11:41, Nate DeSimone wrote:<br class="">Hi Marvin,<br class=""><br class="">Great to meet you and welcome back! Glad you hear you are interested!<br class="">Completing a formal verification of a PE/COFF loader is certainly<br class="">impressive. Was this done with some sort of automated theorem proving?<br class="">It would seem a rather arduous task doing an inductive proof for an<br class="">algorithm like that by hand!<br class=""></blockquote>I would call it "semi-automated", a great deal of intermediate goals<br class="">(preconditions, postconditions, invariants, assertions, ...) were<br class="">required to show all interesting properties. But yes, the actual proof<br class="">steps are automated by common SMT solvers. It was done using the<br class="">AstraVer Toolset and ACSL, latter basically a language to express logic<br class="">statements with C-like syntax.<br class=""><br class=""><blockquote type="cite" class="">I completely agree with you that getting a formally verified PE/COFF<br class="">loader into mainline is undoubtably valuable and would pay security<br class="">dividends for years to come.<br class=""></blockquote>I'm glad to hear that. :)<br class=""><br class=""><blockquote type="cite" class="">Admittedly, this is an area of computer science that I don't have a<br class="">great deal of experience with. The furthest I have gone on this topic<br class="">is writing out proofs for simple algorithms on exams in my Algorithms<br class="">class in college. Regardless you have a much better idea of what the<br class="">current status is of the work that you and Vitaly have done. I guess<br class="">my only question is do you think there is sufficient work remaining to<br class="">fill the 10 week GSoC development window?<br class=""></blockquote>Please don't get me wrong, but I would be surprised if the UEFI<br class="">specification changes I'd like to discuss alone would be completed<br class="">within 10 weeks, let alone implementation throughout the codebase. While<br class="">I think the plain amount of code may be a bit less than say a<br class="">MinPlatform port, the changes are much deeper and require much more<br class="">caution to avoid regressions (e.g. by invalidating undocumented<br class="">assertions). This sadly is not a matter of just replacing the underlying<br class="">library implementation or "plug-in and play" at all. It furthermore<br class="">affects many parts of the stack, the core dispatchers used for all<br class="">platforms, image emulation (EBC), UEFI userland emulation (EmuPkg), and<br class="">so on. I was rather worried the scope is too broad time-wise, but it can<br class="">be narrowed/widened as you see fit really. This is one of *the* core<br class="">components used on millions of device, and many package maintainers need<br class="">to review and validate the changes, this must really be done right the<br class="">first try. :)<br class=""><br class=""><blockquote type="cite" class="">Certainly we can use some of that time to perform the code reviews you<br class="">mention and write up formal ECRs for the UEFI spec changes that you<br class="">believe are needed.<br class=""></blockquote>I believed that was part of the workload, yes, but even without it I<br class="">think there is plenty to do.<br class=""><br class=""><blockquote type="cite" class="">Thank you for sending the application and alerting us to the great<br class="">work you and Vitaly have done! I'll read your paper more closely and<br class="">come back with any questions I still have.<br class=""></blockquote>Thank you, I will gladly explain anything unclear. Just try to not give<br class="">Laszlo too many flashbacks. :)<br class=""></blockquote>I haven't commented yet in this thread, as I thought my stance on this<br class="">undertaking was (or should be) obvious.<br class=""><br class="">I very much welcome a replacement for the PE/COFF parser (as I consider<br class="">its security issues unfixable in an incremental manner). From my reading<br class="">of Marvin's and Vitaly's paper (draft), they have my full trust, and I'm<br class="">ready to put their upcoming code to use in ArmVirtPkg and OvmfPkg with<br class="">minimal actual code review. If fixing the pervasive security problems<br class="">around this area cannot avoid spiraling out to other core code in edk2,<br class="">such as dispatchers, and even to the PI / UEFI specs, so be it.<br class=""><br class="">Regarding GSoC itself: as I stated elsewhere previously, I support<br class="">edk2's participation in GSoC, while at the same time I'm not<br class="">volunteering for mentorship at all. I'm uncertain if GSoC is the best<br class="">framework for upstreaming such a large undertaking, but if it can help,<br class="">we should use it as much as possible.<br class=""><br class="">Thanks<br class="">Laszlo<br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">With Best Regards,<br class="">Nate<br class=""><br class=""><blockquote type="cite" class="">-----Original Message-----<br class="">From: <a href="mailto:devel@edk2.groups.io" class="">devel@edk2.groups.io</a> <<a href="mailto:devel@edk2.groups.io" class="">devel@edk2.groups.io</a>> On Behalf Of Marvin<br class="">Häuser<br class="">Sent: Sunday, April 4, 2021 4:02 PM<br class="">To: <a href="mailto:devel@edk2.groups.io" class="">devel@edk2.groups.io</a>; Laszlo Ersek <<a href="mailto:lersek@redhat.com" class="">lersek@redhat.com</a>>; Andrew Fish<br class=""><<a href="mailto:afish@apple.com" class="">afish@apple.com</a>>; Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com" class="">michael.d.kinney@intel.com</a>><br class="">Subject: [edk2-devel] [GSoC proposal] Secure Image Loader<br class=""><br class="">Good day everyone,<br class=""><br class="">I'll keep the introduction brief because I've been around for a while<br class="">now. :) I'm<br class="">Marvin Häuser, a third-year Computer Science student from TU<br class="">Kaiserslautern,<br class="">Germany. Late last year, my colleague Vitaly from ISP RAS and me<br class="">introduced a<br class="">formally verified Image Loader for UEFI usage at ISP RAS Open[1] due<br class="">to various<br class="">defects we outlined in the corresponding paper. Thank you once again<br class="">Laszlo<br class="">for your *incredible* review work on the publication part.<br class=""><br class="">I now want to make an effort to mainline it, preferably as part of<br class="">the current<br class="">Google Summer of Code event. To be clear, my internship at ISP RAS has<br class="">concluded, and while Vitaly will be available for design discussion,<br class="">he has other<br class="">priorities at the moment and the practical part will be on me. I have<br class="">previously<br class="">submitted a proposal via the GSoC website for your review.<br class=""><br class="">There are many things to consider:<br class="">1. The Image Loader is a core component, and there needs to be a<br class="">significant<br class="">level of quality and security assurance.<br class="">2. Being consumed by many packages, the proposed patch set will take<br class="">a lot of<br class="">time to review and integrate.<br class="">3. During my initial exploration, I discovered defective PPIs and<br class="">protocols (e.g.<br class="">returning data with no corresponding size) originating from the UEFI<br class="">PI and<br class="">UEFI specifications. Changes need to be discussed, settled on, and<br class="">submitted to<br class="">the UEFI Forum.<br class="">4. Some UEFI APIs like the Security Architecture protocols are<br class="">inconveniently<br class="">abstract, see 5.<br class="">5. Some of the current code does not use the existing context, or<br class="">accesses it<br class="">outside of the exposed APIs. The control flow of the dispatchers may<br class="">need to be<br class="">adapted to make the context available to appropriate APIs.<br class=""><br class="">But obviously there are not only unpleasant considerations:<br class="">A. The Image Loader is mostly formally verified, and only very few<br class="">changes will<br class="">be required from the last proven state. This gives a lot of trust in<br class="">its correctness<br class="">and safety.<br class="">B. All outlined defects that are of critical nature have been fixed<br class="">successfully.<br class="">C. The Image Loader has been tested with real-world code loading<br class="">real-world<br class="">OSes on thousands of machines in the past few months, including<br class="">rejecting<br class="">malformed images (configurable by PCD).<br class="">D. The new APIs will centralise everything PE, reducing code<br class="">duplication and<br class="">potentially unsafe operations.<br class="">E. Centralising and reduced parse duplication may improve overall boot<br class="">performance.<br class="">F. The code has been coverage-tested to not contain dead code.<br class="">G. The code has been fuzz-tested including sanitizers to not invoke<br class="">undefined<br class="">behaviour.<br class="">H. I already managed to identify a malformed image in OVMF with its help<br class="">(incorrectly reported section alignment of an Intel IPXE driver). A<br class="">fix will be<br class="">submitted shortly.<br class="">I. I plan to support PE section permissions, allowing for read-only data<br class="">segments when enabled.<br class=""><br class="">There are likely more points for both lists, but I hope this gives a<br class="">decent<br class="">starting point for discussion. What are your thoughts on the matter?<br class="">I strongly<br class="">encourage everyone to read the section regarding defects of our<br class="">publication[2]<br class="">to better understand the motivation. The vague points above can of<br class="">course be<br class="">elaborated in due time, as you see fit.<br class=""><br class="">Thank you for your time!<br class=""><br class="">Best regards,<br class="">Marvin<br class=""><br class=""><br class="">[1] <a href="https://github.com/mhaeuser/ISPRASOpen-SecurePE" class="">https://github.com/mhaeuser/ISPRASOpen-SecurePE</a><br class="">[2] <a href="https://arxiv.org/pdf/2012.05471.pdf" class="">https://arxiv.org/pdf/2012.05471.pdf</a><br class=""><br class=""><br class=""><br class=""><br class=""></blockquote><br class=""><br class=""><br class=""><br class=""></blockquote></blockquote><br class=""><br class=""><br class=""><br class=""></blockquote></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class=""></span></div></blockquote></div><br class=""></body></html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr> Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/73869">View/Reply Online (#73869)</a> |    |  <a target="_blank" href="https://groups.io/mt/81853302/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>