* [PATCH AUTOSEL 4.4 04/21] usb: gadget: net2280: Fix overrun of OUT messages
[not found] <20190422194941.13433-1-sashal@kernel.org>
@ 2019-04-22 19:49 ` Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 05/21] usb: gadget: net2280: Fix net2280_dequeue() Sasha Levin
` (2 subsequent siblings)
3 siblings, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2019-04-22 19:49 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Guido Kiener, Guido Kiener, Felipe Balbi, Sasha Levin, linux-usb
From: Guido Kiener <guido@kiener-muenchen.de>
[ Upstream commit 9d6a54c1430647355a5e23434881b2ca3d192b48 ]
The OUT endpoint normally blocks (NAK) subsequent packets when a
short packet was received and returns an incomplete queue entry to
the gadget driver. Thereby the gadget driver can detect a short packet
when reading queue entries with a length that is not equal to a
multiple of packet size.
The start_queue() function enables receiving OUT packets regardless of
the content of the OUT FIFO. This results in a race: With the current
code, it's possible that the "!ep->is_in && (readl(&ep->regs->ep_stat)
& BIT(NAK_OUT_PACKETS))" test in start_dma() will fail, then a short
packet will be received, and then start_queue() will call
stop_out_naking(). That's what we don't want (OUT naking gets turned
off while there is data in the FIFO) because then the next driver
request might receive a mixture of old and new packets.
With the patch, this race can't occur because the FIFO's state is
tested after we know that OUT naking is already turned on, and OUT
naking is stopped only when both of the conditions are met. This
ensures that all received data is delivered to the gadget driver,
which can detect a short packet now before new packets are appended
to the last short packet.
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Guido Kiener <guido.kiener@rohde-schwarz.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org>
---
drivers/usb/gadget/udc/net2280.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index 8efeadf30b4d..fc94a09e2a5a 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -870,9 +870,6 @@ static void start_queue(struct net2280_ep *ep, u32 dmactl, u32 td_dma)
(void) readl(&ep->dev->pci->pcimstctl);
writel(BIT(DMA_START), &dma->dmastat);
-
- if (!ep->is_in)
- stop_out_naking(ep);
}
static void start_dma(struct net2280_ep *ep, struct net2280_request *req)
@@ -911,6 +908,7 @@ static void start_dma(struct net2280_ep *ep, struct net2280_request *req)
writel(BIT(DMA_START), &dma->dmastat);
return;
}
+ stop_out_naking(ep);
}
tmp = dmactl_default;
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH AUTOSEL 4.4 05/21] usb: gadget: net2280: Fix net2280_dequeue()
[not found] <20190422194941.13433-1-sashal@kernel.org>
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 04/21] usb: gadget: net2280: Fix overrun of OUT messages Sasha Levin
@ 2019-04-22 19:49 ` Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 06/21] usb: gadget: net2272: Fix net2272_dequeue() Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 16/21] usb: u132-hcd: fix resource leak Sasha Levin
3 siblings, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2019-04-22 19:49 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Guido Kiener, Guido Kiener, Felipe Balbi, Sasha Levin, linux-usb
From: Guido Kiener <guido@kiener-muenchen.de>
[ Upstream commit f1d3fba17cd4eeea20397f1324b7b9c69a6a935c ]
When a request must be dequeued with net2280_dequeue() e.g. due
to a device clear action and the same request is finished by the
function scan_dma_completions() then the function net2280_dequeue()
does not find the request in the following search loop and
returns the error -EINVAL without restoring the status ep->stopped.
Thus the endpoint keeps blocked and does not receive any data
anymore.
This fix restores the status and does not issue an error message.
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Guido Kiener <guido.kiener@rohde-schwarz.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org>
---
drivers/usb/gadget/udc/net2280.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index fc94a09e2a5a..3a8d056a5d16 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -1270,9 +1270,9 @@ static int net2280_dequeue(struct usb_ep *_ep, struct usb_request *_req)
break;
}
if (&req->req != _req) {
+ ep->stopped = stopped;
spin_unlock_irqrestore(&ep->dev->lock, flags);
- dev_err(&ep->dev->pdev->dev, "%s: Request mismatch\n",
- __func__);
+ ep_dbg(ep->dev, "%s: Request mismatch\n", __func__);
return -EINVAL;
}
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH AUTOSEL 4.4 06/21] usb: gadget: net2272: Fix net2272_dequeue()
[not found] <20190422194941.13433-1-sashal@kernel.org>
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 04/21] usb: gadget: net2280: Fix overrun of OUT messages Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 05/21] usb: gadget: net2280: Fix net2280_dequeue() Sasha Levin
@ 2019-04-22 19:49 ` Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 16/21] usb: u132-hcd: fix resource leak Sasha Levin
3 siblings, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2019-04-22 19:49 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Guido Kiener, Guido Kiener, Felipe Balbi, Sasha Levin, linux-usb
From: Guido Kiener <guido@kiener-muenchen.de>
[ Upstream commit 091dacc3cc10979ab0422f0a9f7fcc27eee97e69 ]
Restore the status of ep->stopped in function net2272_dequeue().
When the given request is not found in the endpoint queue
the function returns -EINVAL without restoring the state of
ep->stopped. Thus the endpoint keeps blocked and does not transfer
any data anymore.
This fix is only compile-tested, since we do not have a
corresponding hardware. An analogous fix was tested in the sibling
driver. See "usb: gadget: net2280: Fix net2280_dequeue()"
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Guido Kiener <guido.kiener@rohde-schwarz.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org>
---
drivers/usb/gadget/udc/net2272.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/usb/gadget/udc/net2272.c b/drivers/usb/gadget/udc/net2272.c
index 3b6e34fc032b..553922c3be85 100644
--- a/drivers/usb/gadget/udc/net2272.c
+++ b/drivers/usb/gadget/udc/net2272.c
@@ -962,6 +962,7 @@ net2272_dequeue(struct usb_ep *_ep, struct usb_request *_req)
break;
}
if (&req->req != _req) {
+ ep->stopped = stopped;
spin_unlock_irqrestore(&ep->dev->lock, flags);
return -EINVAL;
}
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH AUTOSEL 4.4 16/21] usb: u132-hcd: fix resource leak
[not found] <20190422194941.13433-1-sashal@kernel.org>
` (2 preceding siblings ...)
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 06/21] usb: gadget: net2272: Fix net2272_dequeue() Sasha Levin
@ 2019-04-22 19:49 ` Sasha Levin
3 siblings, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2019-04-22 19:49 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Mukesh Ojha, Greg Kroah-Hartman, Sasha Levin, linux-usb
From: Mukesh Ojha <mojha@codeaurora.org>
[ Upstream commit f276e002793cdb820862e8ea8f76769d56bba575 ]
if platform_driver_register fails, cleanup the allocated resource
gracefully.
Signed-off-by: Mukesh Ojha <mojha@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org>
---
drivers/usb/host/u132-hcd.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
index d5434e7a3b2e..86f9944f337d 100644
--- a/drivers/usb/host/u132-hcd.c
+++ b/drivers/usb/host/u132-hcd.c
@@ -3214,6 +3214,9 @@ static int __init u132_hcd_init(void)
printk(KERN_INFO "driver %s\n", hcd_name);
workqueue = create_singlethread_workqueue("u132");
retval = platform_driver_register(&u132_platform_driver);
+ if (retval)
+ destroy_workqueue(workqueue);
+
return retval;
}
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-04-22 19:54 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20190422194941.13433-1-sashal@kernel.org>
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 04/21] usb: gadget: net2280: Fix overrun of OUT messages Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 05/21] usb: gadget: net2280: Fix net2280_dequeue() Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 06/21] usb: gadget: net2272: Fix net2272_dequeue() Sasha Levin
2019-04-22 19:49 ` [PATCH AUTOSEL 4.4 16/21] usb: u132-hcd: fix resource leak Sasha Levin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).