* [PATCH] aspeed-vhub: epn: fix an incorrect member check on list iterator
@ 2022-03-27 6:24 Xiaomeng Tong
2022-04-22 12:59 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Xiaomeng Tong @ 2022-03-27 6:24 UTC (permalink / raw)
To: balbi
Cc: gregkh, joel, andrew, rentao.bupt, caihuoqing, benh, linux-usb,
linux-arm-kernel, linux-aspeed, linux-kernel, Xiaomeng Tong,
stable
The bug is here:
if (&req->req == u_req) {
The list iterator 'req' will point to a bogus position containing
HEAD if the list is empty or no element is found. This case must
be checked before any use of the iterator, otherwise it may bypass
the 'if (&req->req == u_req) {' check in theory, if '*u_req' obj is
just allocated in the same addr with '&req->req'.
To fix this bug, just mova all thing inside the loop and return 0,
otherwise return error.
Cc: stable@vger.kernel.org
Fixes: 7ecca2a4080cb ("usb/gadget: Add driver for Aspeed SoC virtual hub")
Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com>
---
drivers/usb/gadget/udc/aspeed-vhub/epn.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/drivers/usb/gadget/udc/aspeed-vhub/epn.c b/drivers/usb/gadget/udc/aspeed-vhub/epn.c
index 917892ca8753..aae4ce3e1029 100644
--- a/drivers/usb/gadget/udc/aspeed-vhub/epn.c
+++ b/drivers/usb/gadget/udc/aspeed-vhub/epn.c
@@ -468,27 +468,24 @@ static int ast_vhub_epn_dequeue(struct usb_ep* u_ep, struct usb_request *u_req)
struct ast_vhub *vhub = ep->vhub;
struct ast_vhub_req *req;
unsigned long flags;
- int rc = -EINVAL;
spin_lock_irqsave(&vhub->lock, flags);
/* Make sure it's actually queued on this endpoint */
list_for_each_entry (req, &ep->queue, queue) {
- if (&req->req == u_req)
- break;
- }
-
- if (&req->req == u_req) {
- EPVDBG(ep, "dequeue req @%p active=%d\n",
- req, req->active);
- if (req->active)
- ast_vhub_stop_active_req(ep, true);
- ast_vhub_done(ep, req, -ECONNRESET);
- rc = 0;
+ if (&req->req == u_req) {
+ EPVDBG(ep, "dequeue req @%p active=%d\n",
+ req, req->active);
+ if (req->active)
+ ast_vhub_stop_active_req(ep, true);
+ ast_vhub_done(ep, req, -ECONNRESET);
+ spin_unlock_irqrestore(&vhub->lock, flags);
+ return 0;
+ }
}
spin_unlock_irqrestore(&vhub->lock, flags);
- return rc;
+ return -EINVAL;
}
void ast_vhub_update_epn_stall(struct ast_vhub_ep *ep)
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] aspeed-vhub: epn: fix an incorrect member check on list iterator
2022-03-27 6:24 [PATCH] aspeed-vhub: epn: fix an incorrect member check on list iterator Xiaomeng Tong
@ 2022-04-22 12:59 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2022-04-22 12:59 UTC (permalink / raw)
To: Xiaomeng Tong
Cc: balbi, joel, andrew, rentao.bupt, caihuoqing, benh, linux-usb,
linux-arm-kernel, linux-aspeed, linux-kernel, stable
On Sun, Mar 27, 2022 at 02:24:31PM +0800, Xiaomeng Tong wrote:
> The bug is here:
> if (&req->req == u_req) {
>
> The list iterator 'req' will point to a bogus position containing
> HEAD if the list is empty or no element is found. This case must
> be checked before any use of the iterator, otherwise it may bypass
> the 'if (&req->req == u_req) {' check in theory, if '*u_req' obj is
> just allocated in the same addr with '&req->req'.
>
> To fix this bug, just mova all thing inside the loop and return 0,
> otherwise return error.
>
> Cc: stable@vger.kernel.org
> Fixes: 7ecca2a4080cb ("usb/gadget: Add driver for Aspeed SoC virtual hub")
> Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com>
> ---
> drivers/usb/gadget/udc/aspeed-vhub/epn.c | 23 ++++++++++-------------
> 1 file changed, 10 insertions(+), 13 deletions(-)
Does not apply anymore :(
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-04-22 13:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-27 6:24 [PATCH] aspeed-vhub: epn: fix an incorrect member check on list iterator Xiaomeng Tong
2022-04-22 12:59 ` Greg KH
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).