{
TRACE("Found signature\n");
+ if (Table->TableSize < FIELD_OFFSET(PCI_IRQ_ROUTING_TABLE, Slot) ||
+ Table->TableSize % 16 != 0)
+ {
+ ERR("Invalid routing table size (%u) at %p. Continue searching...\n", Table->TableSize, Table);
+ Table = (PPCI_IRQ_ROUTING_TABLE)((ULONG_PTR)Table + 0x10);
+ continue;
+ }
+
Ptr = (PUCHAR)Table;
Sum = 0;
for (i = 0; i < Table->TableSize; i++)
if ((Sum & 0xFF) != 0)
{
- ERR("Invalid routing table\n");
- return NULL;
+ ERR("Invalid routing table checksum (%#lx) at %p. Continue searching...\n", Sum & 0xFF, Table);
+ }
+ else
+ {
+ TRACE("Valid checksum\n");
+ return Table;
}
-
- TRACE("Valid checksum\n");
-
- return Table;
}
Table = (PPCI_IRQ_ROUTING_TABLE)((ULONG_PTR)Table + 0x10);
}
+ ERR("No valid routing table found!\n");
+
return NULL;
}