mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
pci: Check region ranges are addressable
When parsing the `ranges` DT node, check that both extremes of the regions are addressable without overflow. This assumption can then be safely made when processing the regions. Signed-off-by: Andrew Scull <ascull@google.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
60f4142aa2
commit
ec8eba8c2d
1 changed files with 16 additions and 1 deletions
|
@ -1013,7 +1013,22 @@ static void decode_regions(struct pci_controller *hose, ofnode parent_node,
|
|||
|
||||
if (!IS_ENABLED(CONFIG_SYS_PCI_64BIT) &&
|
||||
type == PCI_REGION_MEM && upper_32_bits(pci_addr)) {
|
||||
debug(" - beyond the 32-bit boundary, ignoring\n");
|
||||
debug(" - pci_addr beyond the 32-bit boundary, ignoring\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!IS_ENABLED(CONFIG_PHYS_64BIT) && upper_32_bits(addr)) {
|
||||
debug(" - addr beyond the 32-bit boundary, ignoring\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (~((pci_addr_t)0) - pci_addr < size) {
|
||||
debug(" - PCI range exceeds max address, ignoring\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (~((phys_addr_t)0) - addr < size) {
|
||||
debug(" - phys range exceeds max address, ignoring\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue