efi_selftest: check length reported by GetNextVariableName()
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 20 Mar 2020 18:20:17 +0000 (19:20 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 22 Mar 2020 10:06:23 +0000 (11:06 +0100)
GetNextVariableName should report the length of the variable including the
final 0x0000 in bytes.

Check this in the unit test.

Increase the buffer size for variable names. 40 bytes is too short.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_selftest/efi_selftest_variables.c

index 5d98c029b8690daf29e4225d712368171969cf62..2c16f3db6cc3270d906e7bf82157cc431e8b723a 100644 (file)
@@ -11,7 +11,7 @@
 #include <efi_selftest.h>
 
 #define EFI_ST_MAX_DATA_SIZE 16
-#define EFI_ST_MAX_VARNAME_SIZE 40
+#define EFI_ST_MAX_VARNAME_SIZE 80
 
 static struct efi_boot_services *boottime;
 static struct efi_runtime_services *runtime;
@@ -155,8 +155,14 @@ static int execute(void)
                        return EFI_ST_FAILURE;
                }
                if (!memcmp(&guid, &guid_vendor0, sizeof(efi_guid_t)) &&
-                   !efi_st_strcmp_16_8(varname, "efi_st_var0"))
+                   !efi_st_strcmp_16_8(varname, "efi_st_var0")) {
                        flag |= 1;
+                       if (len != 24) {
+                               efi_st_error("GetNextVariableName report wrong length %u, expected 24\n",
+                                            (unsigned int)len);
+                               return EFI_ST_FAILURE;
+                       }
+               }
                if (!memcmp(&guid, &guid_vendor1, sizeof(efi_guid_t)) &&
                    !efi_st_strcmp_16_8(varname, "efi_st_var1"))
                        flag |= 2;