Hi Sergio,

Thanks for catching this!  However, the inline comment is a bit much for
a simple NULL pointer check.  Can you remove the comment and resubmit
this patch?

Thanks,
Sarah Sharp

On Wed, Apr 03, 2013 at 03:52:07PM -0700, Sergio Aguirre wrote:
> It is possible that we fail on xhci_mem_init, just before doing
> the INIT_LIST_HEAD, and calling xhci_mem_cleanup.
> 
> Problem is that, the list_for_each_entry_safe macro, dereferences next
> assuming is not NULL (which is the case for a uninitialized list).
> 
> Let's protect from that.
> 
> Signed-off-by: Sergio Aguirre <sergio.a.aguirre.rodrig...@intel.com>
> ---
>  drivers/usb/host/xhci-mem.c |   14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
> index 6dc238c..0f701f7 100644
> --- a/drivers/usb/host/xhci-mem.c
> +++ b/drivers/usb/host/xhci-mem.c
> @@ -1820,9 +1820,17 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
>       scratchpad_free(xhci);
>  
>       spin_lock_irqsave(&xhci->lock, flags);
> -     list_for_each_entry_safe(dev_info, next, &xhci->lpm_failed_devs, list) {
> -             list_del(&dev_info->list);
> -             kfree(dev_info);
> +     /*
> +      * It is possible that we fail during xhci_mem_init, just before
> +      * initializing the list head, and causing a NULL pointer dereference
> +      * on below macro. So, let's be safe, and do a simple null check here.
> +      */
> +     if (xhci->lpm_failed_devs.next) {
> +             list_for_each_entry_safe(dev_info, next,
> +                                      &xhci->lpm_failed_devs, list) {
> +                     list_del(&dev_info->list);
> +                     kfree(dev_info);
> +             }
>       }
>       spin_unlock_irqrestore(&xhci->lock, flags);
>  
> -- 
> 1.7.9.5
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to