[PATCH] dmi: dmicheck: return from dmi_table_smbios*() functions if signature test fails

James Puthukattukaran james.puthukattukaran at oracle.com
Thu Apr 22 19:00:27 UTC 2021


If the dmi_table_smbios*() functions don't match the signature for the paticular
table, then return.

Signed-off-by: James Puthukattukaran <james.puthukattukaran at oracle.com>
---
 src/dmi/dmicheck/dmicheck.c | 46 +++++++++++++++++++++++++++------------------
 1 file changed, 28 insertions(+), 18 deletions(-)

diff --git a/src/dmi/dmicheck/dmicheck.c b/src/dmi/dmicheck/dmicheck.c
index a240365..99cb893 100644
--- a/src/dmi/dmicheck/dmicheck.c
+++ b/src/dmi/dmicheck/dmicheck.c
@@ -370,16 +370,19 @@ static void* dmi_table_smbios(fwts_framework *fw, fwts_smb
ios_entry *entry)
        }

        if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor,
 4) == FWTS_OK
-                       && strncmp(anchor, "_SM_", 4) == 0) {
-               table = malloc(length);
-               if (!table)
-                       return NULL;
-               if (dmi_load_file("/sys/firmware/dmi/tables/DMI", table, length)
 == FWTS_OK) {
-                       fwts_log_info(fw, "SMBIOS table loaded from /sys/firmwar
e/dmi/tables/DMI");
-                       return table;
-               }
-               free(table);
+                       && strncmp(anchor, "_SM_", 4) != 0)
+               return NULL;
+
+
+       table = malloc(length);
+       if (!table)
+               return NULL;
+       if (dmi_load_file("/sys/firmware/dmi/tables/DMI", table, length) == FWTS
_OK) {
+               fwts_log_info(fw, "SMBIOS table loaded from /sys/firmware/dmi/ta
bles/DMI");
+               return table;
        }
+       free(table);
+

        mem = fwts_mmap(addr, length);
        if (mem != FWTS_MAP_FAILED) {
@@ -418,16 +421,19 @@ static void* dmi_table_smbios30(fwts_framework *fw, fwts_s
mbios30_entry *entry)
        }

        if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor,
 5) == FWTS_OK
-                       && strncmp(anchor, "_SM3_", 5) == 0) {
-               table = malloc(length);
-               if (!table)
-                       return NULL;
-               if (dmi_load_file_variable_size("/sys/firmware/dmi/tables/DMI",
table, &length) == FWTS_OK) {
-                       fwts_log_info(fw, "SMBIOS30 table loaded from /sys/firmw
are/dmi/tables/DMI");
-                       return table;
-               }
-               free(table);
+                       && strncmp(anchor, "_SM3_", 5) != 0)
+               return NULL;
+
+
+       table = malloc(length);
+       if (!table)
+               return NULL;
+       if (dmi_load_file_variable_size("/sys/firmware/dmi/tables/DMI", table, &
length) == FWTS_OK) {
+               fwts_log_info(fw, "SMBIOS30 table loaded from /sys/firmware/dmi/
tables/DMI");
+               return table;
        }
+       free(table);
+

        mem = fwts_mmap(addr, length);
        if (mem != FWTS_MAP_FAILED) {
@@ -648,6 +654,8 @@ static int smbios_entry_check(fwts_framework *fw)
                 */
                if (dmi_sane(fw, &entry) == FWTS_OK)
                        fwts_passed(fw, "SMBIOS Table Entry Structure Table Addr
ess and Length looks valid.");
+               else
+                       return FWTS_ERROR;
        }

        return FWTS_OK;
@@ -769,6 +777,8 @@ static int smbios30_entry_check(fwts_framework *fw)
                 */
                if (dmi_smbios30_sane(fw, &entry) == FWTS_OK)
                        fwts_passed(fw, "SMBIOS 3.0 Table Entry Structure Table
Address and Length looks valid.");
+               else
+                       return FWTS_ERROR;
        }

        return FWTS_OK;
--
1.8.3.1



More information about the fwts-devel mailing list