HPE OEM record type 237 offset 0x09 field was changed from a single
byte STRING to a two byte WORD representing date.

Decode both forms of the record based upon record size.

Fixes: cdab638dabb7 ("dmioem: Decode HPE OEM Record 237")
Signed-off-by: Jerry Hoemann <jerry.hoem...@hpe.com>
---
 dmioem.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/dmioem.c b/dmioem.c
index dc4b857..fd6c191 100644
--- a/dmioem.c
+++ b/dmioem.c
@@ -1094,7 +1094,8 @@ static int dmi_decode_hp(const struct dmi_header *h)
                         *  0x06  | Manufacture|STRING | DIMM Manufacturer
                         *  0x07  | Part Number|STRING | DIMM Manufacturer's 
Part Number
                         *  0x08  | Serial Num |STRING | DIMM Vendor Serial 
Number
-                        *  0x09  | Spare Part |STRING | DIMM Spare Part Number
+                        *  0x09  | Spare Part |STRING | DIMM Spare Part Number 
 --OR--
+                        *  0x09  | Man Date   | WORD  | DIM Manufacture Date 
YYWW in BCD
                         */
                        if (gen < G9) return 0;
                        pr_handle_name("%s DIMM Vendor Information", company);
@@ -1106,7 +1107,11 @@ static int dmi_decode_hp(const struct dmi_header *h)
                        if (h->length < 0x09) break;
                        pr_attr("DIMM Vendor Serial Number", "%s", 
dmi_string(h, data[0x08]));
                        if (h->length < 0x0A) break;
-                       pr_attr("DIMM Spare Part Number", "%s", dmi_string(h, 
data[0x09]));
+                       if (h->length == 0x0A)
+                               pr_attr("DIMM Spare Part Number", "%s", 
dmi_string(h, data[0x09]));
+                       if (h->length < 0x0B) break;
+                       if (WORD(data + 0x09))
+                               pr_attr("DIMM Manufacture Date", "20%02x Week 
%2x", data[0x09], data[0x0a]);
                        break;
 
                case 238:
-- 
2.39.2


Reply via email to