Hi,
the attached patch adds code to checksum the pci extension rom and stop
if the stored and calculated checksum differ.
--
Alex
Index: device/pci_rom.c
===================================================================
--- device/pci_rom.c (revision 486)
+++ device/pci_rom.c (working copy)
@@ -33,6 +33,8 @@
unsigned long rom_address;
struct rom_header *rom_header;
struct pci_data *rom_data;
+ unsigned int i;
+ unsigned char sum = 0, *rom_bytes;
if (dev->on_mainboard) {
/* In case some device PCI_ROM_ADDRESS can not be set
@@ -67,7 +69,19 @@
le32_to_cpu(rom_header->signature));
return NULL;
}
+
+ /* checksum */
+ rom_bytes = (unsigned char *)rom_address;
+ for (i = 0; i < rom_header->size * 512 - 1; i++)
+ sum += *(rom_bytes + i);
+ sum = -sum;
+ if (sum != *(rom_bytes + rom_header->size * 512 - 1)) {
+ printk(BIOS_ERR, "Incorrent Expansion ROM checksum (%02x != %02x)\n",
+ *(rom_bytes + rom_header->size * 512 - 1), sum);
+ return NULL;
+ }
+
rom_data = (struct pci_data *)((unsigned char *)rom_header +
le32_to_cpu(rom_header->data));
--
linuxbios mailing list
[email protected]
http://www.linuxbios.org/mailman/listinfo/linuxbios