From 4879ab9d2135cc5cc581062e2ffe25c33eeda4dd Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Thu, 18 Dec 2003 18:22:01 +0000 Subject: [PATCH] fix segfault when dimm spd > 128 bytes check for at least 92 bytes of spd before proceeding --- ipmitool/lib/dimm_spd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ipmitool/lib/dimm_spd.c b/ipmitool/lib/dimm_spd.c index 67d4803..bfc9360 100644 --- a/ipmitool/lib/dimm_spd.c +++ b/ipmitool/lib/dimm_spd.c @@ -65,6 +65,11 @@ const struct valstr spd_voltage_vals[] = { { 0x00, NULL }, }; +/* + * JEDEC Standard Manufacturers Identification Code + * publication JEP106N, December 2003 + */ + const struct valstr jedec_id1_vals[] = { { 0x01, "AMD" }, { 0x02, "AMI" }, @@ -713,6 +718,8 @@ void ipmi_spd_print(struct ipmi_intf * intf, unsigned char id) printf(" Timeout while reading FRU data. (Device not present?)\n"); return; } + if (rsp->ccode) + break; len = rsp->data[0]; memcpy(&spd_data[offset], rsp->data + 1, len); @@ -722,6 +729,9 @@ void ipmi_spd_print(struct ipmi_intf * intf, unsigned char id) if (verbose) printbuf(spd_data, offset, "SPD DATA"); + if (offset < 92) + return; /* we need first 91 bytes to do our thing */ + size = spd_data[5] * (spd_data[31] << 2); printf(" Memory Size : %d MB\n", size); printf(" Memory Type : %s\n", val2str(spd_data[2], spd_memtype_vals));