On 06/01/15 16:14, Laszlo Ersek wrote:
> On 06/01/15 14:08, Heyi Guo wrote:
>> During UEFI SCT, it will throw an exception because "Progress" is
>> passed in with NULL and RouteConfig will try to access the string at
>> *(EFI_STRING *0), i.e. 0xFFFFFFFF14000400.
>>
>> Add sanity check for ExtractConfig and RouteConfig to avoid NULL
>> pointer dereference.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Heyi Guo <[email protected]>
>> ---
>> OvmfPkg/PlatformDxe/Platform.c | 10 ++++++++++
>> 1 file changed, 10 insertions(+)
>>
>> diff --git a/OvmfPkg/PlatformDxe/Platform.c b/OvmfPkg/PlatformDxe/Platform.c
>> index 4ec327e..35fabf8 100644
>> --- a/OvmfPkg/PlatformDxe/Platform.c
>> +++ b/OvmfPkg/PlatformDxe/Platform.c
>> @@ -234,6 +234,11 @@ ExtractConfig (
>> MAIN_FORM_STATE MainFormState;
>> EFI_STATUS Status;
>>
>> + if (Progress == NULL || Results == NULL)
>> + {
>> + return EFI_INVALID_PARAMETER;
>> + }
>> +
>> DEBUG ((EFI_D_VERBOSE, "%a: Request=\"%s\"\n", __FUNCTION__, Request));
>>
>> Status = PlatformConfigToFormState (&MainFormState);
>
> EFI_HII_CONFIG_ROUTING_PROTOCOL.ExtractConfig() does not require any of
> these checks. Both Progress and Results are OUT parameters (ie.
> pointers) and nothing in the spec resolves the caller from passing in
> NULL (or non-NULL garbage, for that matter, which you couldn't catch
> anyway).
>
> I can ACK this hunk if you show me a confirmed Mantis ticket for the
> UEFI spec.
Sorry, I just noticed that above I referenced
EFI_HII_CONFIG_ROUTING_PROTOCOL rather than EFI_HII_CONFIG_ACCESS_PROTOCOL.
However, after checking EFI_HII_CONFIG_ACCESS_PROTOCOL.ExtractConfig()
specifically, I still can't see any requirement for these checks.
>> @@ -327,6 +332,11 @@ RouteConfig (
>> UINTN BlockSize;
>> EFI_STATUS Status;
>>
>> + if (Configuration == NULL || Progress == NULL)
>> + {
>> + return EFI_INVALID_PARAMETER;
>> + }
>> +
>> DEBUG ((EFI_D_VERBOSE, "%a: Configuration=\"%s\"\n", __FUNCTION__,
>> Configuration));
>>
>>
>
> The (Configuration == NULL) check is valid, according to UEFI-2.5. But,
> please update the leading comment on the function accordingly -- please
> document the EFI_INVALID_PARAMETER retval.
>
> The (Progress == NULL) check is not required by the spec, and the
> responsibility of the caller is made clear for this output parameter:
>
> Progress
>
> A pointer to a string filled in with the offset of the most recent
> ‘&’ before the first failing name / value pair (or the beginning of
> the string if the failure is in the first name / value pair) or the
> terminating NULL if all was successful.
>
> "Pointer to a string" implies Progress cannot be NULL. (And, on output,
> *Progress will point into Configuration.)
>
> I do understand that suppressing these SCT bugs in OVMF would be easy.
> That doesn't make it right. Not NACKing this, but you'll have to get an
> ACK from Jordan. (Personally I'm okay only with the
> (Configuration==NULL) check in RouteConfig().)
Again, I looked at the wrong part of the spec, sorry about that.
But, EFI_HII_CONFIG_ACCESS_PROTOCOL.RouteConfig() doesn't even require a
nullity check for Configuration. (It speaks about "Results", which
doesn't exist as a parameter in that function -- this is a spec bug.)
Please ask someone else to give his/her R-b, because I don't think I will.
Thanks
Laszlo
------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel