From 59b6f2084388cc4c76c9738d7068e18099d8bfe7 Mon Sep 17 00:00:00 2001 From: Vijayavardhan Vennapusa Date: Tue, 7 Mar 2017 14:56:20 +0530 Subject: [PATCH] USB: composite: Fix double release of spin_unlock_irqsave Commit b953b45ed08c ("USB: composite: Release spinlock before WARN()") introduced a bug where it leads to calling spin_unlock_ irq_save twice in case of delayed_status zero. Hence fix the issue by returning from composite_setup_continue() right after WARN() in case of delayed_status zero. Change-Id: I33c77ec8a2f97fcd94cffb416e57f3c77d6789f2 Signed-off-by: Vijayavardhan Vennapusa --- drivers/usb/gadget/composite.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 9622514e3df9..9d795489c285 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -2470,6 +2470,7 @@ void usb_composite_setup_continue(struct usb_composite_dev *cdev) } 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__);