[PATCH 2/5] pci: Skip configuring invalid P2P bridge devices

Stefan Roese sr at denx.de
Fri Oct 8 07:52:49 CEST 2021


On 07.10.21 14:50, Pali Rohár wrote:
> Function dm_pci_hose_probe_bus() expects that bus is valid PCI device with
> Bridge header type (0x01). So add check before touching PCI config space to
> prevent misconfiguring some non-standard device.
> 
> Signed-off-by: Pali Rohár <pali at kernel.org>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> ---
>   drivers/pci/pci-uclass.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
> index 044babee164f..5da3515f5f25 100644
> --- a/drivers/pci/pci-uclass.c
> +++ b/drivers/pci/pci-uclass.c
> @@ -627,6 +627,7 @@ int pci_generic_mmap_read_config(
>   
>   int dm_pci_hose_probe_bus(struct udevice *bus)
>   {
> +	u8 header_type;
>   	int sub_bus;
>   	int ret;
>   	int ea_pos;
> @@ -634,6 +635,14 @@ int dm_pci_hose_probe_bus(struct udevice *bus)
>   
>   	debug("%s\n", __func__);
>   
> +	dm_pci_read_config8(bus, PCI_HEADER_TYPE, &header_type);
> +	header_type &= 0x7f;
> +	if (header_type != PCI_HEADER_TYPE_BRIDGE) {
> +		debug("%s: Skipping PCI device %d with Non-Bridge Header Type 0x%x\n",
> +		      __func__, PCI_DEV(dm_pci_get_bdf(bus)), header_type);
> +		return log_msg_ret("probe", -EINVAL);
> +	}
> +
>   	ea_pos = dm_pci_find_capability(bus, PCI_CAP_ID_EA);
>   	if (ea_pos) {
>   		dm_pci_read_config8(bus, ea_pos + sizeof(u32) + sizeof(u8),
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list