Skip to content

Commit

Permalink
drivers/firmware/dmi_scan.c: check dmi version when get system uuid
Browse files Browse the repository at this point in the history
commit f1d8e61 upstream.

As of version 2.6 of the SMBIOS specification, the first 3 fields of the
UUID are supposed to be little-endian encoded.

Also a minor fix to match variable meaning and mute checkpatch.pl

[akpm@linux-foundation.org: tweak code comment]
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com>
Cc: Feng Jin <joe.jin@oracle.com>
Cc: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Abdallah Chatila <abdallah.chatila@ericsson.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Zhenzhong Duan authored and Greg Kroah-Hartman committed Jan 28, 2013
1 parent 0aa31f1 commit 88e10f8
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions drivers/firmware/dmi_scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
static char dmi_empty_string[] = " ";

static u16 __initdata dmi_ver;
/*
* Catch too early calls to dmi_check_system():
*/
Expand Down Expand Up @@ -161,8 +162,10 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, int inde
return;

for (i = 0; i < 16 && (is_ff || is_00); i++) {
if(d[i] != 0x00) is_ff = 0;
if(d[i] != 0xFF) is_00 = 0;
if (d[i] != 0x00)
is_00 = 0;
if (d[i] != 0xFF)
is_ff = 0;
}

if (is_ff || is_00)
Expand All @@ -172,7 +175,15 @@ static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, int inde
if (!s)
return;

sprintf(s, "%pUB", d);
/*
* As of version 2.6 of the SMBIOS specification, the first 3 fields of
* the UUID are supposed to be little-endian encoded. The specification
* says that this is the defacto standard.
*/
if (dmi_ver >= 0x0206)
sprintf(s, "%pUL", d);
else
sprintf(s, "%pUB", d);

dmi_ident[slot] = s;
}
Expand Down Expand Up @@ -414,6 +425,7 @@ static int __init dmi_present(const char __iomem *p)
* DMI version 0.0 means that the real version is taken from
* the SMBIOS version, which we don't know at this point.
*/
dmi_ver = (buf[14] & 0xf0) << 4 | (buf[14] & 0x0f);
if (buf[14] != 0)
printk(KERN_INFO "DMI %d.%d present.\n",
buf[14] >> 4, buf[14] & 0xF);
Expand Down

0 comments on commit 88e10f8

Please sign in to comment.