Skip to contentSkip to conversation

Fix for handling bad IPMI ACPI data

PATCH New Corey Minyard 1 participant 1 message Apr 25, 2005 IPMI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix for handling bad IPMI ACPI data

If the ACPI register bit width is zero (an invalid value) assume it is the default spacing. This avoids some coredumps on invalid data and makes some systems work that have broken ACPI data.

drivers/char/ipmi/ipmi_si_intf.c +11 -2
Index: linux-2.6.12-rc2/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
@@ -1557,8 +1557,17 @@
 		info->irq_setup = NULL;
 	}
 
-	regspacings[intf_num] = spmi->addr.register_bit_width / 8;
-	info->io.regspacing = spmi->addr.register_bit_width / 8;
+	if (spmi->addr.register_bit_width) {
+		/* A (hopefully) properly formed register bit width. */
+		regspacings[intf_num] = spmi->addr.register_bit_width / 8;
+		info->io.regspacing = spmi->addr.register_bit_width / 8;
+	} else {
+		/* Some broken systems get this wrong and set the value
+		 * to zero.  Assume it is the default spacing.  If that
+		 * is wrong, too bad, the vendor should fix the tables. */
+		regspacings[intf_num] = DEFAULT_REGSPACING;
+		info->io.regspacing = DEFAULT_REGSPACING;
+	}
 	regsizes[intf_num] = regspacings[intf_num];
 	info->io.regsize = regsizes[intf_num];
 	regshifts[intf_num] = spmi->addr.register_bit_offset;