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 <heyi....@linaro.org>
>> ---
>>  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
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to