usb: gadget: composite: fix delayed_status race condition when set_interface
authorChunfeng Yun <chunfeng.yun@mediatek.com>
Fri, 25 May 2018 09:24:57 +0000 (17:24 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Aug 2018 11:12:28 +0000 (13:12 +0200)
commit121621e73737af151ef66704ac739cf58a8f1e3c
treeee5c1c4c4ec5e0a10371c62de6620100bd6739de
parent77569fc23d0ab96dd7a6d7ae1a1f01f1b84a6070
usb: gadget: composite: fix delayed_status race condition when set_interface

[ Upstream commit 980900d6318066b9f8314bfb87329a20fd0d1ca4 ]

It happens when enable debug log, if set_alt() returns
USB_GADGET_DELAYED_STATUS and usb_composite_setup_continue()
is called before increasing count of @delayed_status,
so fix it by using spinlock of @cdev->lock.

Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Tested-by: Jay Hsu <shih-chieh.hsu@mediatek.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/composite.c