[SeaBIOS] [PATCH] smbios: Use integer signature instead of string signature

Bruce Rogers brogers at suse.com
Thu Apr 9 23:45:07 CEST 2015


>>> On 4/9/2015 at 10:33 AM, Kevin O'Connor <kevin at koconnor.net> wrote: 
> Change the smbios structure to use a 4 byte u32 signature field
> instead of a 4 byte character string field.  In practice, this allows
> the compiler to place the signature in the initialize code segment and
> thus makes it less likely the signature would be found in the
> f-segment.  (If the smbios signature is found in the f-segment it can
> confuse some table scans.)
> 
> Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
> ---
>  src/fw/biostables.c | 2 +-
>  src/fw/smbios.c     | 2 +-
>  src/std/smbios.h    | 4 +++-
>  3 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/src/fw/biostables.c b/src/fw/biostables.c
> index 50a891b..450aca2 100644
> --- a/src/fw/biostables.c
> +++ b/src/fw/biostables.c
> @@ -271,7 +271,7 @@ copy_smbios(void *pos)
>      if (SMBiosAddr)
>          return;
>      struct smbios_entry_point *p = pos;
> -    if (memcmp(p->anchor_string, "_SM_", 4))
> +    if (p->signature != SMBIOS_SIGNATURE)
>          return;
>      if (checksum(pos, 0x10) != 0)
>          return;
> diff --git a/src/fw/smbios.c b/src/fw/smbios.c
> index dba0541..f3b5ad9 100644
> --- a/src/fw/smbios.c
> +++ b/src/fw/smbios.c
> @@ -37,7 +37,7 @@ smbios_entry_point_setup(u16 max_structure_size,
>  
>      struct smbios_entry_point ep;
>      memset(&ep, 0, sizeof(ep));
> -    memcpy(ep.anchor_string, "_SM_", 4);
> +    ep.signature = SMBIOS_SIGNATURE;
>      ep.length = 0x1f;
>      ep.smbios_major_version = 2;
>      ep.smbios_minor_version = 4;
> diff --git a/src/std/smbios.h b/src/std/smbios.h
> index 0513716..4ccf2ea 100644
> --- a/src/std/smbios.h
> +++ b/src/std/smbios.h
> @@ -3,11 +3,13 @@
>  
>  #include "types.h" // u32
>  
> +#define SMBIOS_SIGNATURE 0x5f4d535f // "_SM_"
> +
>  /* SMBIOS entry point -- must be written to a 16-bit aligned address
>     between 0xf0000 and 0xfffff.
>   */
>  struct smbios_entry_point {
> -    char anchor_string[4];
> +    u32 signature;
>      u8 checksum;
>      u8 length;
>      u8 smbios_major_version;


Thanks for this. I actually did have on my list tosay
to finally put out this revised patch as well.
Though it's a simple patch, here's my ...

Reviewed-by: Bruce Rogers <brogers at suse.com>
Tested-by: Bruce Rogers <brogers at suse.com>

Bruce




More information about the SeaBIOS mailing list