* [PATCH 1/1] DMI: fix dmi_get_year year parsing @ 2009-07-07 20:36 Jiri Slaby 2009-07-08 6:46 ` Matthias Pfaller 0 siblings, 1 reply; 6+ messages in thread From: Jiri Slaby @ 2009-07-07 20:36 UTC (permalink / raw) To: akpm; +Cc: leo, linux-kernel, Jiri Slaby Don't guess a year number base. Use 10 instead, since year may be 2-digit starting with 0, so that we would end up in base equal to 8. Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Reported-by: Matthias Pfaller <leo@marco.de> --- drivers/firmware/dmi_scan.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 6071078..8fe0f6e 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -611,7 +611,7 @@ int dmi_get_year(int field) return 0; s += 1; - year = simple_strtoul(s, NULL, 0); + year = simple_strtoul(s, NULL, 10); if (year && year < 100) { /* 2-digit year */ year += 1900; if (year < 1996) /* no dates < spec 1.0 */ -- 1.6.3.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] DMI: fix dmi_get_year year parsing 2009-07-07 20:36 [PATCH 1/1] DMI: fix dmi_get_year year parsing Jiri Slaby @ 2009-07-08 6:46 ` Matthias Pfaller 2009-07-08 6:54 ` Jiri Slaby 0 siblings, 1 reply; 6+ messages in thread From: Matthias Pfaller @ 2009-07-08 6:46 UTC (permalink / raw) To: Jiri Slaby; +Cc: akpm, linux-kernel Jiri Slaby wrote: > Don't guess a year number base. Use 10 instead, since year may > be 2-digit starting with 0, so that we would end up in base equal > to 8. > > Signed-off-by: Jiri Slaby <jirislaby@gmail.com> > Reported-by: Matthias Pfaller <leo@marco.de> > --- > drivers/firmware/dmi_scan.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c > index 6071078..8fe0f6e 100644 > --- a/drivers/firmware/dmi_scan.c > +++ b/drivers/firmware/dmi_scan.c > @@ -611,7 +611,7 @@ int dmi_get_year(int field) > return 0; > > s += 1; > - year = simple_strtoul(s, NULL, 0); > + year = simple_strtoul(s, NULL, 10); > if (year && year < 100) { /* 2-digit year */ > year += 1900; > if (year < 1996) /* no dates < spec 1.0 */ I just noticed, that this is not enough, because this will still fail for xxx/xx/00. I suggest the following patch: --- drivers/firmware/dmi_scan.c.bak Wed Jul 8 02:42:04 2009 +++ drivers/firmware/dmi_scan.c Wed Jul 8 02:42:17 2009 @@ -360,12 +360,15 @@ return 0; s += 1; - year = simple_strtoul(s, NULL, 0); - if (year && year < 100) { /* 2-digit year */ - year += 1900; - if (year < 1996) /* no dates < spec 1.0 */ - year += 100; + if (s[0] == '0' && s[1] == '0' && s[2] == '\0') { + year = 2000; + } else { + year = simple_strtoul(s, NULL, 10); + if (year && year < 100) { /* 2-digit year */ + year += 1900; + if (year < 1996) /* no dates < spec 1.0 */ + year += 100; + } } - return year; } -- Matthias Pfaller Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8131 5161 41 Hans-Böckler-Str. 2, D 85221 Dachau Fax +49 8131 5161 66 http://www.marco.de/ Email leo@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] DMI: fix dmi_get_year year parsing 2009-07-08 6:46 ` Matthias Pfaller @ 2009-07-08 6:54 ` Jiri Slaby 2009-07-08 7:03 ` Matthias Pfaller 0 siblings, 1 reply; 6+ messages in thread From: Jiri Slaby @ 2009-07-08 6:54 UTC (permalink / raw) To: Matthias Pfaller; +Cc: akpm, linux-kernel, Eric W. Biederman On 07/08/2009 08:46 AM, Matthias Pfaller wrote: > Jiri Slaby wrote: >> Don't guess a year number base. Use 10 instead, since year may >> be 2-digit starting with 0, so that we would end up in base equal >> to 8. >> >> Signed-off-by: Jiri Slaby <jirislaby@gmail.com> >> Reported-by: Matthias Pfaller <leo@marco.de> >> --- >> drivers/firmware/dmi_scan.c | 2 +- >> 1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c >> index 6071078..8fe0f6e 100644 >> --- a/drivers/firmware/dmi_scan.c >> +++ b/drivers/firmware/dmi_scan.c >> @@ -611,7 +611,7 @@ int dmi_get_year(int field) >> return 0; >> >> s += 1; >> - year = simple_strtoul(s, NULL, 0); >> + year = simple_strtoul(s, NULL, 10); >> if (year && year < 100) { /* 2-digit year */ >> year += 1900; >> if (year < 1996) /* no dates < spec 1.0 */ > > I just noticed, that this is not enough, because this will still fail > for xxx/xx/00. I suggest the following patch: Actually the patch below is not correct. Standard says consider xx/xx/yy as 19yy, not 20yy. BTW. the patch above is not useful, reporting 1908 and 1909 as a year is almost the same as 1900. Do you have such a broken BIOS? > --- drivers/firmware/dmi_scan.c.bak Wed Jul 8 02:42:04 2009 > +++ drivers/firmware/dmi_scan.c Wed Jul 8 02:42:17 2009 > @@ -360,12 +360,15 @@ > return 0; > > s += 1; > - year = simple_strtoul(s, NULL, 0); > - if (year && year < 100) { /* 2-digit year */ > - year += 1900; > - if (year < 1996) /* no dates < spec 1.0 */ > - year += 100; > + if (s[0] == '0' && s[1] == '0' && s[2] == '\0') { > + year = 2000; > + } else { > + year = simple_strtoul(s, NULL, 10); > + if (year && year < 100) { /* 2-digit year */ > + year += 1900; > + if (year < 1996) /* no dates < spec 1.0 */ > + year += 100; > + } > } > - > return year; > } > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] DMI: fix dmi_get_year year parsing 2009-07-08 6:54 ` Jiri Slaby @ 2009-07-08 7:03 ` Matthias Pfaller 2009-07-09 7:12 ` DMI year "00" + ACPI [was: DMI: fix dmi_get_year year parsing] Jiri Slaby 0 siblings, 1 reply; 6+ messages in thread From: Matthias Pfaller @ 2009-07-08 7:03 UTC (permalink / raw) To: Jiri Slaby, akpm, linux-kernel, Eric W. Biederman Jiri Slaby wrote: > On 07/08/2009 08:46 AM, Matthias Pfaller wrote: >> Jiri Slaby wrote: >>> Don't guess a year number base. Use 10 instead, since year may >>> be 2-digit starting with 0, so that we would end up in base equal >>> to 8. >>> >>> Signed-off-by: Jiri Slaby <jirislaby@gmail.com> >>> Reported-by: Matthias Pfaller <leo@marco.de> >>> --- >>> drivers/firmware/dmi_scan.c | 2 +- >>> 1 files changed, 1 insertions(+), 1 deletions(-) >>> >>> diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c >>> index 6071078..8fe0f6e 100644 >>> --- a/drivers/firmware/dmi_scan.c >>> +++ b/drivers/firmware/dmi_scan.c >>> @@ -611,7 +611,7 @@ int dmi_get_year(int field) >>> return 0; >>> >>> s += 1; >>> - year = simple_strtoul(s, NULL, 0); >>> + year = simple_strtoul(s, NULL, 10); >>> if (year && year < 100) { /* 2-digit year */ >>> year += 1900; >>> if (year < 1996) /* no dates < spec 1.0 */ >> I just noticed, that this is not enough, because this will still fail >> for xxx/xx/00. I suggest the following patch: > > Actually the patch below is not correct. Standard says consider xx/xx/yy > as 19yy, not 20yy. > > BTW. the patch above is not useful, reporting 1908 and 1909 as a year is > almost the same as 1900. Sorry, I don't understand. simple_strtoul will return 8 for my bios. So 1900 will get added resulting in 1908 (as you said). But because 1908 is still less than 1996 now 100 will get added which results in 2008 which is what I need. > Do you have such a broken BIOS? Yes. Its on an etx-cd, an embedded board from kontron. dmidecode output: Handle 0x0000, DMI type 0, 24 bytes BIOS Information Vendor: Phoenix Technologies LTD Version: MCALR116 Release Date: 08/13/08 Address: 0xE3F90 Runtime Size: 114800 bytes ROM Size: 1024 kB Characteristics: ISA is supported PCI is supported PC Card (PCMCIA) is supported PNP is supported BIOS is upgradeable BIOS shadowing is allowed ESCD support is available Boot from CD is supported ACPI is supported USB legacy is supported BIOS boot specification is supported Our systems started to fail after we got boards with a newer bios from our supplier... > >> --- drivers/firmware/dmi_scan.c.bak Wed Jul 8 02:42:04 2009 >> +++ drivers/firmware/dmi_scan.c Wed Jul 8 02:42:17 2009 >> @@ -360,12 +360,15 @@ >> return 0; >> >> s += 1; >> - year = simple_strtoul(s, NULL, 0); >> - if (year && year < 100) { /* 2-digit year */ >> - year += 1900; >> - if (year < 1996) /* no dates < spec 1.0 */ >> - year += 100; >> + if (s[0] == '0' && s[1] == '0' && s[2] == '\0') { >> + year = 2000; >> + } else { >> + year = simple_strtoul(s, NULL, 10); >> + if (year && year < 100) { /* 2-digit year */ >> + year += 1900; >> + if (year < 1996) /* no dates < spec 1.0 */ >> + year += 100; >> + } >> } >> - >> return year; >> } >> > -- Matthias Pfaller Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8131 5161 41 Hans-Böckler-Str. 2, D 85221 Dachau Fax +49 8131 5161 66 http://www.marco.de/ Email leo@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München ^ permalink raw reply [flat|nested] 6+ messages in thread
* DMI year "00" + ACPI [was: DMI: fix dmi_get_year year parsing] 2009-07-08 7:03 ` Matthias Pfaller @ 2009-07-09 7:12 ` Jiri Slaby 2009-07-09 7:39 ` Matthias Pfaller 0 siblings, 1 reply; 6+ messages in thread From: Jiri Slaby @ 2009-07-09 7:12 UTC (permalink / raw) To: Matthias Pfaller Cc: akpm, linux-kernel, Eric W. Biederman, Len Brown, linux-acpi On 07/08/2009 09:03 AM, Matthias Pfaller wrote: > Jiri Slaby wrote: >> On 07/08/2009 08:46 AM, Matthias Pfaller wrote: >>> Jiri Slaby wrote: >>>> Don't guess a year number base. Use 10 instead, since year may >>>> be 2-digit starting with 0, so that we would end up in base equal >>>> to 8. >>>> >>>> Signed-off-by: Jiri Slaby <jirislaby@gmail.com> >>>> Reported-by: Matthias Pfaller <leo@marco.de> >>>> --- >>>> drivers/firmware/dmi_scan.c | 2 +- >>>> 1 files changed, 1 insertions(+), 1 deletions(-) >>>> >>>> diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c >>>> index 6071078..8fe0f6e 100644 >>>> --- a/drivers/firmware/dmi_scan.c >>>> +++ b/drivers/firmware/dmi_scan.c >>>> @@ -611,7 +611,7 @@ int dmi_get_year(int field) >>>> return 0; >>>> >>>> s += 1; >>>> - year = simple_strtoul(s, NULL, 0); >>>> + year = simple_strtoul(s, NULL, 10); >>>> if (year && year < 100) { /* 2-digit year */ >>>> year += 1900; >>>> if (year < 1996) /* no dates < spec 1.0 */ >>> I just noticed, that this is not enough, because this will still fail >>> for xxx/xx/00. I suggest the following patch: >> >> Actually the patch below is not correct. Standard says consider xx/xx/yy >> as 19yy, not 20yy. >> >> BTW. the patch above is not useful, reporting 1908 and 1909 as a year is >> almost the same as 1900. > > Sorry, I don't understand. Nevermind, you're right. Both patches are OK, however we might hit a regression with 00/00/00 entries so that acpi gets unintentionally armed now for them (ACPI checks year == 0). I don't know if it's worth it. Any ideas? >>> --- drivers/firmware/dmi_scan.c.bak Wed Jul 8 02:42:04 2009 >>> +++ drivers/firmware/dmi_scan.c Wed Jul 8 02:42:17 2009 >>> @@ -360,12 +360,15 @@ >>> return 0; >>> >>> s += 1; >>> - year = simple_strtoul(s, NULL, 0); >>> - if (year && year < 100) { /* 2-digit year */ >>> - year += 1900; >>> - if (year < 1996) /* no dates < spec 1.0 */ >>> - year += 100; >>> + if (s[0] == '0' && s[1] == '0' && s[2] == '\0') { >>> + year = 2000; >>> + } else { >>> + year = simple_strtoul(s, NULL, 10); >>> + if (year && year < 100) { /* 2-digit year */ >>> + year += 1900; >>> + if (year < 1996) /* no dates < spec >>> 1.0 */ >>> + year += 100; >>> + } >>> } >>> - >>> return year; >>> } ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: DMI year "00" + ACPI [was: DMI: fix dmi_get_year year parsing] 2009-07-09 7:12 ` DMI year "00" + ACPI [was: DMI: fix dmi_get_year year parsing] Jiri Slaby @ 2009-07-09 7:39 ` Matthias Pfaller 0 siblings, 0 replies; 6+ messages in thread From: Matthias Pfaller @ 2009-07-09 7:39 UTC (permalink / raw) To: Jiri Slaby; +Cc: akpm, linux-kernel, Eric W. Biederman, Len Brown, linux-acpi Jiri Slaby wrote: > On 07/08/2009 09:03 AM, Matthias Pfaller wrote: >> Jiri Slaby wrote: >>> On 07/08/2009 08:46 AM, Matthias Pfaller wrote: >>>> Jiri Slaby wrote: >>>>> Don't guess a year number base. Use 10 instead, since year may >>>>> be 2-digit starting with 0, so that we would end up in base equal >>>>> to 8. >>>>> >>>>> Signed-off-by: Jiri Slaby <jirislaby@gmail.com> >>>>> Reported-by: Matthias Pfaller <leo@marco.de> >>>>> --- >>>>> drivers/firmware/dmi_scan.c | 2 +- >>>>> 1 files changed, 1 insertions(+), 1 deletions(-) >>>>> >>>>> diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c >>>>> index 6071078..8fe0f6e 100644 >>>>> --- a/drivers/firmware/dmi_scan.c >>>>> +++ b/drivers/firmware/dmi_scan.c >>>>> @@ -611,7 +611,7 @@ int dmi_get_year(int field) >>>>> return 0; >>>>> >>>>> s += 1; >>>>> - year = simple_strtoul(s, NULL, 0); >>>>> + year = simple_strtoul(s, NULL, 10); >>>>> if (year && year < 100) { /* 2-digit year */ >>>>> year += 1900; >>>>> if (year < 1996) /* no dates < spec 1.0 */ >>>> I just noticed, that this is not enough, because this will still fail >>>> for xxx/xx/00. I suggest the following patch: >>> Actually the patch below is not correct. Standard says consider xx/xx/yy >>> as 19yy, not 20yy. >>> >>> BTW. the patch above is not useful, reporting 1908 and 1909 as a year is >>> almost the same as 1900. >> Sorry, I don't understand. > > Nevermind, you're right. Both patches are OK, however we might hit a > regression with 00/00/00 entries so that acpi gets unintentionally armed > now for them (ACPI checks year == 0). I don't know if it's worth it. Any > ideas? There are bioses with 00/00/00? How about that: --- dmi_scan.c.orig Thu Jul 9 03:34:48 2009 +++ dmi_scan.c Thu Jul 9 03:38:19 2009 @@ -352,17 +352,36 @@ return -1; if (*s == '\0') return 0; + + /* Month must not be zero */ + if (simple_strtoul(s, NULL, 10) == 0) + return 0; + + /* Look for day of month */ + s = strchr(s, '/'); + if (!s) + return 0; + + /* Day of month must not be zero */ + s += 1; + if (simple_strtoul(s, NULL, 10) == 0) + return 0; + + /* Look for year */ s = strrchr(s, '/'); if (!s) return 0; s += 1; - year = simple_strtoul(s, NULL, 0); - if (year && year < 100) { /* 2-digit year */ - year += 1900; - if (year < 1996) /* no dates < spec 1.0 */ - year += 100; + if (s[0] == '0' && s[1] == '0' && s[2] == '\0') { + year = 2000; + } else { + year = simple_strtoul(s, NULL, 10); + if (year && year < 100) { /* 2-digit year */ + year += 1900; + if (year < 1996) /* no dates < spec 1.0 */ + year += 100; + } } - return year; } -- Matthias Pfaller Software Entwicklung marco Systemanalyse und Entwicklung GmbH Tel +49 8131 5161 41 Hans-Böckler-Str. 2, D 85221 Dachau Fax +49 8131 5161 66 http://www.marco.de/ Email leo@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-07-09 7:46 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-07 20:36 [PATCH 1/1] DMI: fix dmi_get_year year parsing Jiri Slaby 2009-07-08 6:46 ` Matthias Pfaller 2009-07-08 6:54 ` Jiri Slaby 2009-07-08 7:03 ` Matthias Pfaller 2009-07-09 7:12 ` DMI year "00" + ACPI [was: DMI: fix dmi_get_year year parsing] Jiri Slaby 2009-07-09 7:39 ` Matthias Pfaller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).