On Wed, 2013-03-06 at 16:07 +0800, Zhenzhong Duan wrote: > On 2013-03-06 07:37, akpm@xxxxxxxxxxxxxxxxxxxx wrote: [...] > > Subject: dmi_scan: fix missing check for _DMI_ signature in smbios_present() > > > > Commit 9f9c9cbb6057 ('drivers/firmware/dmi_scan.c: fetch dmi version from > > SMBIOS if it exists') hoisted the check for "_DMI_" into > > dmi_scan_machine(), which means that we don't bother to check for "_DMI_" > > at offset 16 in an SMBIOS entry. smbios_present() may also call > > dmi_present() for an address where we found "_SM_", if it failed further > > validation. > > > > Check for "_DMI_" in smbios_present() before calling dmi_present(). [...] > > --- a/drivers/firmware/dmi_scan.c~dmi_scan-fix-missing-check-for-_dmi_-signature-in-smbios_present > > +++ a/drivers/firmware/dmi_scan.c > > @@ -442,7 +442,6 @@ static int __init dmi_present(const char > > static int __init smbios_present(const char __iomem *p) > > { > > u8 buf[32]; > > - int offset = 0; > > > > memcpy_fromio(buf, p, 32); > > if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) { > > @@ -461,9 +460,9 @@ static int __init smbios_present(const c > > dmi_ver = 0x0206; > > break; > > } > > - offset = 16; > > + return memcmp(q + 16, "_DMI_", 5) || dmi_present(p + 16); > > } > > I remember H.J found a typo in this patch and the following patch. > >The patch has a typo: > > > >- offset = 16; > >+ return memcmp(q + 16, "_DMI_", 5) || dmi_present(p + 16); > > } > > > >'q' isn't defined here. Change it to `p" also fixes the problem for me. > > > >H.J. [...] I don't know how I ended up sending this broken version rather than what I actually tested. Sorry about that. Ben. -- Ben Hutchings Always try to do things in chronological order; it's less confusing that way.
Attachment:
signature.asc
Description: This is a digitally signed message part