summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJozef Martiniak <jomajm@gmail.com>2022-07-08 09:06:44 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-07-08 14:50:43 +0200
commit04cb742d4d8f30dc2e83b46ac317eec09191c68e (patch)
treecd1189d178ab5bff8b44eea58b85f70282eb7ef2
parent2e1421d6ce321118dfff370e473ba8d290b2ecbd (diff)
gadgetfs: ep_io - wait until IRQ finishes
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>
-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 79990597c39f..01c3ead7d1b4 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;
}
}