[PATCH] usb: xhci-pci: Check for errors from dm_pci_map_bar()

Stefan Roese sr at denx.de
Mon Jan 18 14:26:40 CET 2021


On 18.01.21 12:13, Pali Rohár wrote:
> Function dm_pci_map_bar() may fail and returns NULL. Check this to prevent
> dereferencing a NULL pointer.
> 
> In xhci-pci this may happen when board does not enable CONFIG_PCI_PNP and
> PCI_BASE_ADDRESS_0 contains unconfigured zero address.
> 
> Signed-off-by: Pali Rohár <pali at kernel.org>

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

Thanks,
Stefan

> ---
>   drivers/usb/host/xhci-pci.c | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> index 2b445f21b5..7f5be95f6c 100644
> --- a/drivers/usb/host/xhci-pci.c
> +++ b/drivers/usb/host/xhci-pci.c
> @@ -13,7 +13,7 @@
>   #include <usb.h>
>   #include <usb/xhci.h>
>   
> -static void xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
> +static int xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
>   			  struct xhci_hcor **ret_hcor)
>   {
>   	struct xhci_hccr *hccr;
> @@ -22,6 +22,11 @@ static void xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
>   
>   	hccr = (struct xhci_hccr *)dm_pci_map_bar(dev,
>   			PCI_BASE_ADDRESS_0, PCI_REGION_MEM);
> +	if (!hccr) {
> +		printf("XHCI-PCI init cannot map PCI mem bar\n");
> +		return -EIO;
> +	}
> +
>   	hcor = (struct xhci_hcor *)((uintptr_t) hccr +
>   			HC_LENGTH(xhci_readl(&hccr->cr_capbase)));
>   
> @@ -35,14 +40,18 @@ static void xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
>   	dm_pci_read_config32(dev, PCI_COMMAND, &cmd);
>   	cmd |= PCI_COMMAND_MASTER;
>   	dm_pci_write_config32(dev, PCI_COMMAND, cmd);
> +	return 0;
>   }
>   
>   static int xhci_pci_probe(struct udevice *dev)
>   {
>   	struct xhci_hccr *hccr;
>   	struct xhci_hcor *hcor;
> +	int ret;
>   
> -	xhci_pci_init(dev, &hccr, &hcor);
> +	ret = xhci_pci_init(dev, &hccr, &hcor);
> +	if (ret)
> +		return ret;
>   
>   	return xhci_register(dev, hccr, hcor);
>   }
> 


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