[PATCH] bios: smbios: minor re-structure of test1

Keng-Yü Lin keng-yu.lin at canonical.com
Thu Jun 20 09:04:32 UTC 2013


On Thu, Jun 20, 2013 at 4:28 PM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/bios/smbios/smbios.c | 90 ++++++++++++++++++++++++------------------------
>  1 file changed, 45 insertions(+), 45 deletions(-)
>
> diff --git a/src/bios/smbios/smbios.c b/src/bios/smbios/smbios.c
> index 6fc2fa4..57c8999 100644
> --- a/src/bios/smbios/smbios.c
> +++ b/src/bios/smbios/smbios.c
> @@ -56,66 +56,66 @@ static int smbios_test1(fwts_framework *fw)
>         fwts_smbios_entry entry;
>         fwts_smbios_type  type;
>         uint16_t          version;
> +       uint8_t checksum;
> +       static char warning[] =
> +               "This field is not checked by the kernel, and so will not affect the system, "
> +               "however it should be fixed to conform to the latest version of the "
> +               "System Management BIOS (SMBIOS) Reference Specification. ";
>
>         fwts_log_info(fw,
>                 "This test tries to find and sanity check the SMBIOS "
>                 "data structures.");
> -       if ((addr = fwts_smbios_find_entry(fw, &entry, &type, &version)) == NULL)
> +
> +       if ((addr = fwts_smbios_find_entry(fw, &entry, &type, &version)) == NULL) {
>                 fwts_failed(fw, LOG_LEVEL_MEDIUM,
>                         "SMBIOSNoEntryPoint",
>                         "Could not find SMBIOS Table Entry Point.");
> -       else {
> -               uint8_t checksum;
> -               static char warning[] =
> -                       "This field is not checked by the kernel, and so will not affect the system, "
> -                       "however it should be fixed to conform to the latest version of the "
> -                       "System Management BIOS (SMBIOS) Reference Specification. ";
> -
> -               fwts_passed(fw, "Found SMBIOS Table Entry Point at %p", addr);
> +               return FWTS_OK;
> +       }
>
> -               smbios_dump_entry(fw, &entry, type);
> +       fwts_passed(fw, "Found SMBIOS Table Entry Point at %p", addr);
> +       smbios_dump_entry(fw, &entry, type);
>
> -               if (type == FWTS_SMBIOS) {
> -                       checksum = fwts_checksum((uint8_t*)&entry, sizeof(fwts_smbios_entry));
> -                       if (checksum != 0) {
> -                               fwts_failed(fw, LOG_LEVEL_HIGH,
> -                                       "SMBIOSBadChecksum",
> -                                       "SMBIOS Table Entry Point Checksum is 0x%2.2x, should be 0x%2.2x",
> -                                               entry.checksum, (uint8_t)(entry.checksum - checksum));
> -                       }
> -                       if (entry.length != 0x1f) {
> -                               fwts_failed(fw, LOG_LEVEL_LOW,
> -                                       "SMBIOSBadEntryLength",
> -                                       "SMBIOS Table Entry Point Length is 0x%2.2x, should be 0x1f", entry.length);
> -                               fwts_advice(fw, "%s Note that version 2.1 of the specification incorrectly stated that the "
> -                                       "Entry Point Length should be 0x1e when it should be 0x1f.", warning);
> -                       }
> -               }
> -               if (memcmp(entry.anchor_string, "_DMI_", 5) != 0) {
> -                       fwts_failed(fw, LOG_LEVEL_HIGH,
> -                               "SMBIOSBadIntermediateAnchor",
> -                               "SMBIOS Table Entry Intermediate Anchor String was '%5.5s' and should be '_DMI_'.",
> -                               entry.anchor_string);
> -                       fwts_advice(fw, "%s", warning);
> -               }
> -               /* Intermediate checksum for legacy DMI */
> -               checksum = fwts_checksum(((uint8_t*)&entry)+16, 15);
> +       if (type == FWTS_SMBIOS) {
> +               checksum = fwts_checksum((uint8_t*)&entry, sizeof(fwts_smbios_entry));
>                 if (checksum != 0) {
>                         fwts_failed(fw, LOG_LEVEL_HIGH,
>                                 "SMBIOSBadChecksum",
> -                               "SMBIOS Table Entry Point Intermediate Checksum is 0x%2.2x, should be 0x%2.2x",
> -                                       entry.intermediate_checksum,
> -                                       (uint8_t)(entry.intermediate_checksum - checksum));
> +                               "SMBIOS Table Entry Point Checksum is 0x%2.2x, should be 0x%2.2x",
> +                                       entry.checksum, (uint8_t)(entry.checksum - checksum));
>                 }
> -               if ((entry.struct_table_length > 0) && (entry.struct_table_address == 0)) {
> -                       fwts_failed(fw, LOG_LEVEL_HIGH,
> -                               "SMBIOSBadTableAddress",
> -                               "SMBIOS Table Entry Structure Table Address is NULL and should be defined.");
> -                       fwts_advice(fw,
> -                               "The address of the SMBIOS Structure Tables must be defined if the "
> -                               "length of these tables is defined.");
> +               if (entry.length != 0x1f) {
> +                       fwts_failed(fw, LOG_LEVEL_LOW,
> +                               "SMBIOSBadEntryLength",
> +                               "SMBIOS Table Entry Point Length is 0x%2.2x, should be 0x1f", entry.length);
> +                       fwts_advice(fw, "%s Note that version 2.1 of the specification incorrectly stated that the "
> +                               "Entry Point Length should be 0x1e when it should be 0x1f.", warning);
>                 }
>         }
> +       if (memcmp(entry.anchor_string, "_DMI_", 5) != 0) {
> +               fwts_failed(fw, LOG_LEVEL_HIGH,
> +                       "SMBIOSBadIntermediateAnchor",
> +                       "SMBIOS Table Entry Intermediate Anchor String was '%5.5s' and should be '_DMI_'.",
> +                       entry.anchor_string);
> +               fwts_advice(fw, "%s", warning);
> +       }
> +       /* Intermediate checksum for legacy DMI */
> +       checksum = fwts_checksum(((uint8_t*)&entry)+16, 15);
> +       if (checksum != 0) {
> +               fwts_failed(fw, LOG_LEVEL_HIGH,
> +                       "SMBIOSBadChecksum",
> +                       "SMBIOS Table Entry Point Intermediate Checksum is 0x%2.2x, should be 0x%2.2x",
> +                               entry.intermediate_checksum,
> +                               (uint8_t)(entry.intermediate_checksum - checksum));
> +       }
> +       if ((entry.struct_table_length > 0) && (entry.struct_table_address == 0)) {
> +               fwts_failed(fw, LOG_LEVEL_HIGH,
> +                       "SMBIOSBadTableAddress",
> +                       "SMBIOS Table Entry Structure Table Address is NULL and should be defined.");
> +               fwts_advice(fw,
> +                       "The address of the SMBIOS Structure Tables must be defined if the "
> +                       "length of these tables is defined.");
> +       }
>
>         return FWTS_OK;
>  }
> --
> 1.8.3.1
>

many thanks, Colin. :-)

Acked-by: Keng-Yu Lin <kengyu at canonical.com>



More information about the fwts-devel mailing list