efi_loader: notification with TPL_APPLICATION not allowed

The UEFI specification requires event notification levels to be
> TPL_APPLICATION and <= TPL_HIGH_LEVEL.

With the patch the CreateEvent() and CreatedEventEx() services are changed
to check that the notification level is not TPL_APPLICATION.

Reference:
UEFI Specification 2.8 Errata B, table 27 "TPL Restrictions",
"Event Notification Levels"

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2021-01-06 12:55:22 +01:00
parent d33f31816f
commit 2cfb68fd83

View File

@ -687,8 +687,15 @@ efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
return EFI_INVALID_PARAMETER;
}
/*
* The UEFI specification requires event notification levels to be
* > TPL_APPLICATION and <= TPL_HIGH_LEVEL.
*
* Parameter NotifyTpl should not be checked if it is not used.
*/
if ((type & (EVT_NOTIFY_WAIT | EVT_NOTIFY_SIGNAL)) &&
(!notify_function || is_valid_tpl(notify_tpl) != EFI_SUCCESS))
(!notify_function || is_valid_tpl(notify_tpl) != EFI_SUCCESS ||
notify_tpl == TPL_APPLICATION))
return EFI_INVALID_PARAMETER;
ret = efi_allocate_pool(pool_type, sizeof(struct efi_event),