[PATCH] usb: cdnsp: Fixes issue with dequeuing not queued requests

Pawel Laszczak posted 1 patch 2 years, 7 months ago
drivers/usb/cdns3/cdnsp-gadget.c | 3 +++
1 file changed, 3 insertions(+)
[PATCH] usb: cdnsp: Fixes issue with dequeuing not queued requests
Posted by Pawel Laszczak 2 years, 7 months ago
Gadget ACM while unloading module try to dequeue not queued usb
request which causes the kernel to crash.
Patch adds extra condition to check whether usb request is processed
by CDNSP driver.

cc: <stable@vger.kernel.org>
Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
---
 drivers/usb/cdns3/cdnsp-gadget.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/cdns3/cdnsp-gadget.c b/drivers/usb/cdns3/cdnsp-gadget.c
index fff9ec9c391f..3a30c2af0c00 100644
--- a/drivers/usb/cdns3/cdnsp-gadget.c
+++ b/drivers/usb/cdns3/cdnsp-gadget.c
@@ -1125,6 +1125,9 @@ static int cdnsp_gadget_ep_dequeue(struct usb_ep *ep,
 	unsigned long flags;
 	int ret;

+	if (request->status != -EINPROGRESS)
+		return 0;
+
 	if (!pep->endpoint.desc) {
 		dev_err(pdev->dev,
 			"%s: can't dequeue to disabled endpoint\n",
-- 
2.37.2
Re: [PATCH] usb: cdnsp: Fixes issue with dequeuing not queued requests
Posted by Peter Chen 2 years, 5 months ago
On Thu, Jul 13, 2023 at 4:14 PM Pawel Laszczak <pawell@cadence.com> wrote:
>
> Gadget ACM while unloading module try to dequeue not queued usb
> request which causes the kernel to crash.
> Patch adds extra condition to check whether usb request is processed
> by CDNSP driver.
>
> cc: <stable@vger.kernel.org>
> Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
> Signed-off-by: Pawel Laszczak <pawell@cadence.com>
> ---

Acked-by: Peter Chen <peter.chen@kernel.org>

Peter

>  drivers/usb/cdns3/cdnsp-gadget.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/usb/cdns3/cdnsp-gadget.c b/drivers/usb/cdns3/cdnsp-gadget.c
> index fff9ec9c391f..3a30c2af0c00 100644
> --- a/drivers/usb/cdns3/cdnsp-gadget.c
> +++ b/drivers/usb/cdns3/cdnsp-gadget.c
> @@ -1125,6 +1125,9 @@ static int cdnsp_gadget_ep_dequeue(struct usb_ep *ep,
>         unsigned long flags;
>         int ret;
>
> +       if (request->status != -EINPROGRESS)
> +               return 0;
> +
>         if (!pep->endpoint.desc) {
>                 dev_err(pdev->dev,
>                         "%s: can't dequeue to disabled endpoint\n",
> --
> 2.37.2
>
Re: [PATCH] usb: cdnsp: Fixes issue with dequeuing not queued requests
Posted by Peter Chen 2 years, 7 months ago
On 23-07-13 04:14:29, Pawel Laszczak wrote:
> Gadget ACM while unloading module try to dequeue not queued usb
> request which causes the kernel to crash.
> Patch adds extra condition to check whether usb request is processed
> by CDNSP driver.
> 

Why ACM does that?

> cc: <stable@vger.kernel.org>
> Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
> Signed-off-by: Pawel Laszczak <pawell@cadence.com>
> ---
>  drivers/usb/cdns3/cdnsp-gadget.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/usb/cdns3/cdnsp-gadget.c b/drivers/usb/cdns3/cdnsp-gadget.c
> index fff9ec9c391f..3a30c2af0c00 100644
> --- a/drivers/usb/cdns3/cdnsp-gadget.c
> +++ b/drivers/usb/cdns3/cdnsp-gadget.c
> @@ -1125,6 +1125,9 @@ static int cdnsp_gadget_ep_dequeue(struct usb_ep *ep,
>  	unsigned long flags;
>  	int ret;
> 
> +	if (request->status != -EINPROGRESS)
> +		return 0;
> +

Why not you use pending list which used at cdnsp_ep_enqueue to do this?


>  	if (!pep->endpoint.desc) {
>  		dev_err(pdev->dev,
>  			"%s: can't dequeue to disabled endpoint\n",
> -- 
> 2.37.2
> 

-- 

Thanks,
Peter Chen
RE: [PATCH] usb: cdnsp: Fixes issue with dequeuing not queued requests
Posted by Pawel Laszczak 2 years, 7 months ago
>
>On 23-07-13 04:14:29, Pawel Laszczak wrote:
>> Gadget ACM while unloading module try to dequeue not queued usb
>> request which causes the kernel to crash.
>> Patch adds extra condition to check whether usb request is processed
>> by CDNSP driver.
>>
>
>Why ACM does that?
>
>> cc: <stable@vger.kernel.org>
>> Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence
>> USBSSP DRD Driver")
>> Signed-off-by: Pawel Laszczak <pawell@cadence.com>
>> ---
>>  drivers/usb/cdns3/cdnsp-gadget.c | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/usb/cdns3/cdnsp-gadget.c
>> b/drivers/usb/cdns3/cdnsp-gadget.c
>> index fff9ec9c391f..3a30c2af0c00 100644
>> --- a/drivers/usb/cdns3/cdnsp-gadget.c
>> +++ b/drivers/usb/cdns3/cdnsp-gadget.c
>> @@ -1125,6 +1125,9 @@ static int cdnsp_gadget_ep_dequeue(struct
>usb_ep *ep,
>>  	unsigned long flags;
>>  	int ret;
>>
>> +	if (request->status != -EINPROGRESS)
>> +		return 0;
>> +
>
>Why not you use pending list which used at cdnsp_ep_enqueue to do this?

It's just simpler and faster way - no other reasons. 

Thank,
Pawel

>
>
>>  	if (!pep->endpoint.desc) {
>>  		dev_err(pdev->dev,
>>  			"%s: can't dequeue to disabled endpoint\n",
>> --
>> 2.37.2
>>
>
>--
>
>Thanks,
>Peter Chen
Re: [PATCH] usb: cdnsp: Fixes issue with dequeuing not queued requests
Posted by Peter Chen 2 years, 6 months ago
On 23-07-14 07:19:21, Pawel Laszczak wrote:
> >
> >On 23-07-13 04:14:29, Pawel Laszczak wrote:
> >> Gadget ACM while unloading module try to dequeue not queued usb
> >> request which causes the kernel to crash.
> >> Patch adds extra condition to check whether usb request is processed
> >> by CDNSP driver.
> >>
> >
> >Why ACM does that?

Would you please explain which situation triggers it?

> >
> >> cc: <stable@vger.kernel.org>
> >> Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence
> >> USBSSP DRD Driver")
> >> Signed-off-by: Pawel Laszczak <pawell@cadence.com>
> >> ---
> >>  drivers/usb/cdns3/cdnsp-gadget.c | 3 +++
> >>  1 file changed, 3 insertions(+)
> >>
> >> diff --git a/drivers/usb/cdns3/cdnsp-gadget.c
> >> b/drivers/usb/cdns3/cdnsp-gadget.c
> >> index fff9ec9c391f..3a30c2af0c00 100644
> >> --- a/drivers/usb/cdns3/cdnsp-gadget.c
> >> +++ b/drivers/usb/cdns3/cdnsp-gadget.c
> >> @@ -1125,6 +1125,9 @@ static int cdnsp_gadget_ep_dequeue(struct
> >usb_ep *ep,
> >>  	unsigned long flags;
> >>  	int ret;
> >>
> >> +	if (request->status != -EINPROGRESS)
> >> +		return 0;
> >> +
> >
> >Why not you use pending list which used at cdnsp_ep_enqueue to do this?
> 
> It's just simpler and faster way - no other reasons. 

Okay, get it.

-- 

Thanks,
Peter Chen