From 2e6480dbe7719b632ac5d3d54483d826cf8a9fac Mon Sep 17 00:00:00 2001 From: Chandana Kishori Chiluveru Date: Tue, 31 Oct 2017 11:33:23 +0530 Subject: [PATCH] USB: composite: Release spinlock before WARN() if WARN() is called under spinlock, it will lead crash due to watchdog timeout. Hence fix it by releasing spinlock before calling WARN(). And also check cdev->config is NULL or not before calling WARN(). Change-Id: Iebd00932b94164e9f40aa6126a2352437b1141ed Signed-off-by: Vijayavardhan Vennapusa Signed-off-by: Chandana Kishori Chiluveru --- drivers/usb/gadget/composite.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index bb47d39aa0ff..8c9052536740 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -2505,7 +2505,13 @@ void usb_composite_setup_continue(struct usb_composite_dev *cdev) spin_lock_irqsave(&cdev->lock, flags); if (cdev->delayed_status == 0) { + if (!cdev->config) { + spin_unlock_irqrestore(&cdev->lock, flags); + return; + } + spin_unlock_irqrestore(&cdev->lock, flags); WARN(cdev, "%s: Unexpected call\n", __func__); + return; } else if (--cdev->delayed_status == 0) { DBG(cdev, "%s: Completing delayed status\n", __func__);