[flashrom] [PATCH] Fix out-of-bounds ICH FREG permission printing

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Tue Jul 13 01:00:11 CEST 2010


Fix out-of-bounds ICH FREG permission printing. A bit was masked, but
not shifted, and that led to worst-case accesses of index 24 in an array
with 4 members.

I've improved readability in the variable declaration block as well.

Thanks to Stephen Kou for reporting the bug.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: flashrom-ich_freg_nosegfault/chipset_enable.c
===================================================================
--- flashrom-ich_freg_nosegfault/chipset_enable.c	(Revision 1075)
+++ flashrom-ich_freg_nosegfault/chipset_enable.c	(Arbeitskopie)
@@ -452,10 +452,11 @@
 		"Flash Descriptor", "BIOS", "Management Engine",
 		"Gigabit Ethernet", "Platform Data"
 	};
-	int rwperms = ((ICH_BRWA(frap) & (1 << i)) << 1) |
-		      ((ICH_BRRA(frap) & (1 << i)) << 0);
+	uint32_t base, limit;
+	int rwperms = (((ICH_BRWA(frap) >> i) & 1) << 1) |
+		      (((ICH_BRRA(frap) >> i) & 1) << 0);
 	int offset = 0x54 + i * 4;
-	uint32_t freg = mmio_readl(ich_spibar + offset), base, limit;
+	uint32_t freg = mmio_readl(ich_spibar + offset);
 
 	msg_pdbg("0x%02X: 0x%08x (FREG%i: %s)\n",
 		     offset, freg, i, region_names[i]);


-- 
http://www.hailfinger.org/





More information about the flashrom mailing list