efi_loader: allowable event types in CreateEventEx()
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sat, 4 May 2019 08:12:50 +0000 (10:12 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 7 May 2019 19:10:03 +0000 (21:10 +0200)
CreateEventEx() does not allow the following event types:

* EVT_SIGNAL_EXIT_BOOT_SERVICES
* EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE

This check is needed to pass the UEFI SCT conformance test.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Alexander Graf <agraf@csgraf.de>
lib/efi_loader/efi_boottime.c

index e5c46e9f0819b58e4dc80d422f8f44423daa550f..3ed08e7c377e7f25b111414ca4e59c3d8b7a1fc6 100644 (file)
@@ -664,10 +664,26 @@ efi_status_t EFIAPI efi_create_event_ex(uint32_t type, efi_uintn_t notify_tpl,
                                        efi_guid_t *event_group,
                                        struct efi_event **event)
 {
+       efi_status_t ret;
+
        EFI_ENTRY("%d, 0x%zx, %p, %p, %pUl", type, notify_tpl, notify_function,
                  notify_context, event_group);
-       return EFI_EXIT(efi_create_event(type, notify_tpl, notify_function,
-                                        notify_context, event_group, event));
+
+       /*
+        * The allowable input parameters are the same as in CreateEvent()
+        * except for the following two disallowed event types.
+        */
+       switch (type) {
+       case EVT_SIGNAL_EXIT_BOOT_SERVICES:
+       case EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE:
+               ret = EFI_INVALID_PARAMETER;
+               goto out;
+       }
+
+       ret = efi_create_event(type, notify_tpl, notify_function,
+                              notify_context, event_group, event);
+out:
+       return EFI_EXIT(ret);
 }
 
 /**