[PATCH] usb: cdns2: fix memory double free in cdns2_gadget_giveback

Subsystems: the rest, usb subsystem

STALE278d

2 messages, 2 authors, 2026-01-07 · open the first message on its own page

[PATCH] usb: cdns2: fix memory double free in cdns2_gadget_giveback

From: ReBeating <hidden>
Date: 2025-12-26 03:17:53

A patch similar to commit 5fd9e45f1ebc("usb: cdns3: fix memory double
 free when handle zero packet").

As 5fd9e45f1ebc points out, the cdns2_gadget_giveback() function also has
the same memory double free issue when handling zero-length packets.

Add check for usb_gadget_giveback_request() to avoid double free of memory.
If it's additional zero length packet request, do not call 
usb_gadget_giveback_request().

Signed-off-by: ReBeating <redacted>
---
 drivers/usb/gadget/udc/cdns2/cdns2-gadget.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c b/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
index 7e69944ef18a..4f7898c2e364 100644
--- a/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
+++ b/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
@@ -253,7 +253,7 @@ void cdns2_gadget_giveback(struct cdns2_endpoint *pep,
 
 	trace_cdns2_request_giveback(preq);
 
-	if (request->complete) {
+	if (request->complete && request->buf != pdev->zlp_buf) {
 		spin_unlock(&pdev->lock);
 		usb_gadget_giveback_request(&pep->endpoint, request);
 		spin_lock(&pdev->lock);
-- 
2.34.1

Re: [PATCH] usb: cdns2: fix memory double free in cdns2_gadget_giveback

From: Greg KH <gregkh@linuxfoundation.org>
Date: 2026-01-07 15:05:09

On Fri, Dec 26, 2025 at 11:17:13AM +0800, ReBeating wrote:
quoted hunk
A patch similar to commit 5fd9e45f1ebc("usb: cdns3: fix memory double
 free when handle zero packet").

As 5fd9e45f1ebc points out, the cdns2_gadget_giveback() function also has
the same memory double free issue when handling zero-length packets.

Add check for usb_gadget_giveback_request() to avoid double free of memory.
If it's additional zero length packet request, do not call 
usb_gadget_giveback_request().

Signed-off-by: ReBeating <redacted>
---
 drivers/usb/gadget/udc/cdns2/cdns2-gadget.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c b/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
index 7e69944ef18a..4f7898c2e364 100644
--- a/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
+++ b/drivers/usb/gadget/udc/cdns2/cdns2-gadget.c
@@ -253,7 +253,7 @@ void cdns2_gadget_giveback(struct cdns2_endpoint *pep,
 
 	trace_cdns2_request_giveback(preq);
 
-	if (request->complete) {
+	if (request->complete && request->buf != pdev->zlp_buf) {
 		spin_unlock(&pdev->lock);
 		usb_gadget_giveback_request(&pep->endpoint, request);
 		spin_lock(&pdev->lock);
-- 
2.34.1
Hi,

This is the friendly patch-bot of Greg Kroah-Hartman.  You have sent him
a patch that has triggered this response.  He used to manually respond
to these common problems, but in order to save his sanity (he kept
writing the same thing over and over, yet to different people), I was
created.  Hopefully you will not take offence and will fix the problem
in your patch and resubmit it so that it can be accepted into the Linux
kernel tree.

You are receiving this message because of the following common error(s)
as indicated below:

- It looks like you did not use your "real" name for the patch on either
  the Signed-off-by: line, or the From: line (both of which have to
  match).  Please read the kernel file,
  Documentation/process/submitting-patches.rst for how to do this
  correctly.

If you wish to discuss this problem further, or you have questions about
how to resolve this issue, please feel free to respond to this email and
Greg will reply once he has dug out from the pending patches received
from other developers.

thanks,

greg k-h's patch email bot
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help