hdrtype &= PCI_HEADER_TYPE_MASK;
if ( hdrtype == PCI_HEADER_TYPE_BRIDGE ) {
pci_read_config_byte ( pci, PCI_SUBORDINATE, &sub );
- end = PCI_BUSDEVFN ( PCI_SEG ( *busdevfn ),
- ( sub + 1 ), 0, 0 );
- count = ( end - range.start );
- if ( count > range.count ) {
- DBGC ( pci, PCI_FMT " found subordinate bus "
- "%#02x\n", PCI_ARGS ( pci ), sub );
- range.count = count;
+ if ( sub <= PCI_BUS ( *busdevfn ) ) {
+ DBGC ( pci, PCI_FMT " ignoring invalid "
+ "subordinate bus %#02x\n",
+ PCI_ARGS ( pci ), sub );
+ } else {
+ end = PCI_BUSDEVFN ( PCI_SEG ( *busdevfn ),
+ ( sub + 1 ), 0, 0 );
+ count = ( end - range.start );
+ if ( count > range.count ) {
+ DBGC ( pci, PCI_FMT " found "
+ "subordinate bus %#02x\n",
+ PCI_ARGS ( pci ), sub );
+ range.count = count;
+ }
}
}