summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJozef Martiniak <jomajm@gmail.com>2022-07-08 10:06:44 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-08-25 12:38:15 +0300
commit9ac14f973cb91f0c01776517e6d50981f32b8038 (patch)
treebfffed2638f42be43aa89bf263a912100aefc9f5 /drivers
parentc29a4baaad38a332c0ae480cf6d6c5bf75ac1828 (diff)
downloadlinux-9ac14f973cb91f0c01776517e6d50981f32b8038.tar.xz
gadgetfs: ep_io - wait until IRQ finishes
[ Upstream commit 04cb742d4d8f30dc2e83b46ac317eec09191c68e ] after usb_ep_queue() if wait_for_completion_interruptible() is interrupted we need to wait until IRQ gets finished. Otherwise complete() from epio_complete() can corrupt stack. Signed-off-by: Jozef Martiniak <jomajm@gmail.com> Link: https://lore.kernel.org/r/20220708070645.6130-1-jomajm@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/legacy/inode.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
index 454860d52ce7..cd097474b6c3 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -362,6 +362,7 @@ ep_io (struct ep_data *epdata, void *buf, unsigned len)
spin_unlock_irq (&epdata->dev->lock);
DBG (epdata->dev, "endpoint gone\n");
+ wait_for_completion(&done);
epdata->status = -ENODEV;
}
}