Re: [patch] ehci-ppc-of: problems in unwind

2010-08-16 Thread Grant Likely
On Sat, Aug 14, 2010 at 3:06 AM, Dan Carpenter  wrote:
> The iounmap(ehci->ohci_hcctrl_reg); should be the first thing we do
> because the ioremap() was the last thing we did.  Also if we hit any of
> the goto statements in the original code then it would have led to a
> NULL dereference of "ehci".  This bug was introduced in: 796bcae7361c
> "USB: powerpc: Workaround for the PPC440EPX USBH_23 errata [take 3]"
>
> I modified the few lines in front a little so that my code didn't
> obscure the return success code path.
>
> Signed-off-by: Dan Carpenter 

Looks correct, but I don't have the hardware to test.

Slightly-Reviewed-by: Grant Likely 

g.

> ---
> I don't have a cross compile environment set up so I haven't compiled
> this code.  Sorry for that.
>
> diff --git a/drivers/usb/host/ehci-ppc-of.c b/drivers/usb/host/ehci-ppc-of.c
> index 335ee69..ba52be4 100644
> --- a/drivers/usb/host/ehci-ppc-of.c
> +++ b/drivers/usb/host/ehci-ppc-of.c
> @@ -192,17 +192,19 @@ ehci_hcd_ppc_of_probe(struct platform_device *op, const 
> struct of_device_id *mat
>        }
>
>        rv = usb_add_hcd(hcd, irq, 0);
> -       if (rv == 0)
> -               return 0;
> +       if (rv)
> +               goto err_ehci;
> +
> +       return 0;
>
> +err_ehci:
> +       if (ehci->has_amcc_usb23)
> +               iounmap(ehci->ohci_hcctrl_reg);
>        iounmap(hcd->regs);
>  err_ioremap:
>        irq_dispose_mapping(irq);
>  err_irq:
>        release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
> -
> -       if (ehci->has_amcc_usb23)
> -               iounmap(ehci->ohci_hcctrl_reg);
>  err_rmr:
>        usb_put_hcd(hcd);
>
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
___
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss


[patch] ehci-ppc-of: problems in unwind

2010-08-14 Thread Dan Carpenter
The iounmap(ehci->ohci_hcctrl_reg); should be the first thing we do
because the ioremap() was the last thing we did.  Also if we hit any of
the goto statements in the original code then it would have led to a
NULL dereference of "ehci".  This bug was introduced in: 796bcae7361c
"USB: powerpc: Workaround for the PPC440EPX USBH_23 errata [take 3]"

I modified the few lines in front a little so that my code didn't
obscure the return success code path.

Signed-off-by: Dan Carpenter 
---
I don't have a cross compile environment set up so I haven't compiled
this code.  Sorry for that.

diff --git a/drivers/usb/host/ehci-ppc-of.c b/drivers/usb/host/ehci-ppc-of.c
index 335ee69..ba52be4 100644
--- a/drivers/usb/host/ehci-ppc-of.c
+++ b/drivers/usb/host/ehci-ppc-of.c
@@ -192,17 +192,19 @@ ehci_hcd_ppc_of_probe(struct platform_device *op, const 
struct of_device_id *mat
}
 
rv = usb_add_hcd(hcd, irq, 0);
-   if (rv == 0)
-   return 0;
+   if (rv)
+   goto err_ehci;
+
+   return 0;
 
+err_ehci:
+   if (ehci->has_amcc_usb23)
+   iounmap(ehci->ohci_hcctrl_reg);
iounmap(hcd->regs);
 err_ioremap:
irq_dispose_mapping(irq);
 err_irq:
release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
-
-   if (ehci->has_amcc_usb23)
-   iounmap(ehci->ohci_hcctrl_reg);
 err_rmr:
usb_put_hcd(hcd);
 
___
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss