On 15 July 2016 at 08:33, Laszlo Ersek <[email protected]> wrote:
> On 07/15/16 08:07, Ard Biesheuvel wrote:
>> On 15 July 2016 at 01:27, Laszlo Ersek <[email protected]> wrote:
>
>>> First, the build tests. I built OVMF 84 times, with the following settings:
>>>
>>> * Dimension 1: whether your and Steven's patches were applied or not.
>>
>> I take it this means this series only?
>
> Ah, yes, sorry about the ambiguity -- with "your and Steven's patches" I
> meant the five patches in this series -- one patch from Steven, four
> patches from you.
>
>>> * However, then I built my program -- find it attached -- with -b DEBUG
>>> and -b RELEASE too, and the -b RELEASE binary is broken. Here's the
>>> difference in output:
>>>
>>> FS2:\> DebugEnrollDefaultKeys.efi
>>> info: SetupMode=1 SecureBoot=0 SecureBootEnable=1 CustomMode=1 VendorKeys=0
>>> info: SetupMode=0 SecureBoot=1 SecureBootEnable=1 CustomMode=0 VendorKeys=0
>>> info: success
>>>
>>> versus
>>>
>>> FS2:\> OptEnrollDefaultKeys.efi
>>> info: SetupMode=1 SecureBoot=0 SecureBootEnable=1 CustomMode=1 VendorKeys=0
>>> error: EnrollListOfX509Certs("db",
>>> D719B2CB-3D3A-4596-A3BC-DAD00E67656F): Invalid Parameter
>>>
>>> I don't know why this happens, but it definitely relates to varargs --
>>> the program uses them liberally.
>>>
>>
>> If this code ultimately uses __builtin_ms_va_lists with -O2 and fails,
>> it makes sense to report it to the GCC maintainers (assuming we can
>> create a test case). I noticed that this code iterates over the same
>> VA_LIST twice, I wonder how well that was tested ...
>
> You make a good point about using VA_LIST twice possibly tickling gcc
> the wrong way. Plus, there's one (VOID)VA_ARG() macro invocation in my
> code -- in order to step over some arguments --, which might not be all
> that usual as well.
>
> In any case, the way I use varargs seems to be standards conformant.
>
> With regard to reporting this to gcc developers: I won't try that. I'm
> discouraged by two facts:
>
> * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50818 -- open since
> October 2011. You'll find some recent comments from Steven and David in
> it :)
>
> * http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10963 --
> shortly after I ran into the -Os corruption issue with GCC48, I created
> and posted this small reproducer. Creating the reproducer wasn't
> trivial. In parallel I sent the same reproducer to one of my (indirect)
> colleagues at Red Hat, who had been a veteran in upstream GCC
> development and maintenance. I also asked him how/where I should report
> the bug. I got no answer from him.
>
> If you'd like to report a GCC bug, please go ahead, but I won't waste my
> time :)
>

It seems that it is your testcase that is broken:

--- a/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c
+++ b/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c
@@ -663,6 +663,8 @@ EnrollListOfX509Certs (
   UINT8            *Data;
   UINT8            *Position;

+  Status = EFI_SUCCESS;
+
   //
   // compute total size first, for UINT32 range check, and allocation
   //

With that change, everything works fine for me

Thanks,
Ard.
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to