summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2009-08-16 14:01:22 +0200
committerJeff Garzik <jgarzik@redhat.com>2009-09-09 03:17:47 +0200
commit02c24fa87724bb3af969463cd74dc3b3feb24740 (patch)
tree8ffcdc8e5aa79cc10f0658c11aaebe2d14d4aaf9
parentlibata: unbreak TPM filtering by reorganizing ata_scsi_pass_thru() (diff)
downloadlinux-02c24fa87724bb3af969463cd74dc3b3feb24740.tar.xz
linux-02c24fa87724bb3af969463cd74dc3b3feb24740.zip
dmi: fix date handling in dmi_get_year()
Year parsing in dmi_get_year() had the following two bugs. * "00" is treated as invalid instead of 2000 because zero return from simple_strtoul() is treated as error. * "0N" where N >= 8 is treated as invalid of 200N because the leading 0 is considered to specify octal. Fix the above two bugs by using endptr to detect invalid number and forcing decimal. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r--drivers/firmware/dmi_scan.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 24c84ae81527..531e621677ce 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -577,6 +577,7 @@ int dmi_get_year(int field)
{
int year;
const char *s = dmi_get_system_info(field);
+ char *e;
if (!s)
return -1;
@@ -587,8 +588,8 @@ int dmi_get_year(int field)
return 0;
s += 1;
- year = simple_strtoul(s, NULL, 0);
- if (year && year < 100) { /* 2-digit year */
+ year = simple_strtoul(s, &e, 10);
+ if (s != e && year < 100) { /* 2-digit year */
year += 1900;
if (year < 1996) /* no dates < spec 1.0 */
year += 100;