mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-02 17:13:28 +08:00
efi_loader: efi_open_protocol: parameter checks
Add all parameter checks for function efi_open_protocol that do not depend on a locking table. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
b5349f742a
commit
69baec6781
@ -718,15 +718,35 @@ static efi_status_t EFIAPI efi_open_protocol(
|
||||
{
|
||||
struct list_head *lhandle;
|
||||
int i;
|
||||
efi_status_t r = EFI_UNSUPPORTED;
|
||||
efi_status_t r = EFI_INVALID_PARAMETER;
|
||||
|
||||
EFI_ENTRY("%p, %p, %p, %p, %p, 0x%x", handle, protocol,
|
||||
protocol_interface, agent_handle, controller_handle,
|
||||
attributes);
|
||||
|
||||
if (!protocol_interface && attributes !=
|
||||
EFI_OPEN_PROTOCOL_TEST_PROTOCOL) {
|
||||
r = EFI_INVALID_PARAMETER;
|
||||
if (!handle || !protocol ||
|
||||
(!protocol_interface && attributes !=
|
||||
EFI_OPEN_PROTOCOL_TEST_PROTOCOL)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (attributes) {
|
||||
case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL:
|
||||
case EFI_OPEN_PROTOCOL_GET_PROTOCOL:
|
||||
case EFI_OPEN_PROTOCOL_TEST_PROTOCOL:
|
||||
break;
|
||||
case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER:
|
||||
if (controller_handle == handle)
|
||||
goto out;
|
||||
case EFI_OPEN_PROTOCOL_BY_DRIVER:
|
||||
case EFI_OPEN_PROTOCOL_BY_DRIVER | EFI_OPEN_PROTOCOL_EXCLUSIVE:
|
||||
if (controller_handle == NULL)
|
||||
goto out;
|
||||
case EFI_OPEN_PROTOCOL_EXCLUSIVE:
|
||||
if (agent_handle == NULL)
|
||||
goto out;
|
||||
break;
|
||||
default:
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -752,8 +772,11 @@ static efi_status_t EFIAPI efi_open_protocol(
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
goto unsupported;
|
||||
}
|
||||
|
||||
unsupported:
|
||||
r = EFI_UNSUPPORTED;
|
||||
out:
|
||||
return EFI_EXIT(r);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user