diff mbox series

usb: dwc3: pci: Fix reference count leak in dwc3_pci_resume_work

Message ID 20200614031525.128556-1-pakki001@umn.edu (mailing list archive)
State Mainlined
Commit 2655971ad4b34e97dd921df16bb0b08db9449df7
Headers show
Series usb: dwc3: pci: Fix reference count leak in dwc3_pci_resume_work | expand

Commit Message

Aditya Pakki June 14, 2020, 3:15 a.m. UTC
dwc3_pci_resume_work() calls pm_runtime_get_sync() that increments
the reference counter. In case of failure, decrement the reference
count and return the error.

Signed-off-by: Aditya Pakki <pakki001@umn.edu>
---
 drivers/usb/dwc3/dwc3-pci.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Sergei Shtylyov June 14, 2020, 8:50 a.m. UTC | #1
Hello!

On 14.06.2020 6:15, Aditya Pakki wrote:

> dwc3_pci_resume_work() calls pm_runtime_get_sync() that increments
> the reference counter. In case of failure, decrement the reference
> count and return the error.

    In this case you still return nothing.

> 
> Signed-off-by: Aditya Pakki <pakki001@umn.edu>
> ---
>   drivers/usb/dwc3/dwc3-pci.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
> index b67372737dc9..96c05b121fac 100644
> --- a/drivers/usb/dwc3/dwc3-pci.c
> +++ b/drivers/usb/dwc3/dwc3-pci.c
> @@ -206,8 +206,10 @@ static void dwc3_pci_resume_work(struct work_struct *work)
>   	int ret;
>   
>   	ret = pm_runtime_get_sync(&dwc3->dev);
> -	if (ret)
> +	if (ret) {
> +		pm_runtime_put_sync_autosuspend(&dwc3->dev);
>   		return;
> +	}
>   
>   	pm_runtime_mark_last_busy(&dwc3->dev);
>   	pm_runtime_put_sync_autosuspend(&dwc3->dev);

MBR, Sergei
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index b67372737dc9..96c05b121fac 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -206,8 +206,10 @@  static void dwc3_pci_resume_work(struct work_struct *work)
 	int ret;
 
 	ret = pm_runtime_get_sync(&dwc3->dev);
-	if (ret)
+	if (ret) {
+		pm_runtime_put_sync_autosuspend(&dwc3->dev);
 		return;
+	}
 
 	pm_runtime_mark_last_busy(&dwc3->dev);
 	pm_runtime_put_sync_autosuspend(&dwc3->dev);