Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1634126 > unrolled thread

[PATCH] usb: gadget: udc: add null check before pointer dereference

Started by"Gustavo A. R. Silva" <garsilva@embeddedor.com>
First post2017-05-02 06:10 +0200
Last post2017-05-02 20:50 +0200
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] usb: gadget: udc: add null check before pointer dereference "Gustavo A. R. Silva" <garsilva@embeddedor.com> - 2017-05-02 06:10 +0200
    Re: [PATCH] usb: gadget: udc: add null check before pointer dereference Alan Stern <stern@rowland.harvard.edu> - 2017-05-02 16:40 +0200
      Re: [PATCH] usb: gadget: udc: add null check before pointer  dereference "Gustavo A. R. Silva" <garsilva@embeddedor.com> - 2017-05-02 18:00 +0200
        [PATCH v2] usb: gadget: udc: add null check before pointer  dereference "Gustavo A. R. Silva" <garsilva@embeddedor.com> - 2017-05-02 19:10 +0200
          Re: [PATCH v2] usb: gadget: udc: add null check before pointer  dereference Alan Stern <stern@rowland.harvard.edu> - 2017-05-02 20:50 +0200

#1634126 — [PATCH] usb: gadget: udc: add null check before pointer dereference

From"Gustavo A. R. Silva" <garsilva@embeddedor.com>
Date2017-05-02 06:10 +0200
Subject[PATCH] usb: gadget: udc: add null check before pointer dereference
Message-ID<tCxip-1nj-13@gated-at.bofh.it>
Add null check before dereferencing dev->regs pointer inside
net2280_led_shutdown() function.

Addresses-Coverity-ID: 101783
Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
---
 drivers/usb/gadget/udc/net2280.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index 3828c2e..1898a4b 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -3573,7 +3573,11 @@ static void net2280_remove(struct pci_dev *pdev)
 	BUG_ON(dev->driver);
 
 	/* then clean up the resources we allocated during probe() */
-	net2280_led_shutdown(dev);
+
+	if (dev->regs) {
+		net2280_led_shutdown(dev);
+		iounmap(dev->regs);
+	}
 	if (dev->requests) {
 		int		i;
 		for (i = 1; i < 5; i++) {
@@ -3588,8 +3592,6 @@ static void net2280_remove(struct pci_dev *pdev)
 		free_irq(pdev->irq, dev);
 	if (dev->quirks & PLX_PCIE)
 		pci_disable_msi(pdev);
-	if (dev->regs)
-		iounmap(dev->regs);
 	if (dev->region)
 		release_mem_region(pci_resource_start(pdev, 0),
 				pci_resource_len(pdev, 0));
-- 
2.5.0

[toc] | [next] | [standalone]


#1634461

FromAlan Stern <stern@rowland.harvard.edu>
Date2017-05-02 16:40 +0200
Message-ID<tCH85-7Q0-13@gated-at.bofh.it>
In reply to#1634126
On Mon, 1 May 2017, Gustavo A. R. Silva wrote:

> Add null check before dereferencing dev->regs pointer inside
> net2280_led_shutdown() function.
> 
> Addresses-Coverity-ID: 101783
> Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
> ---
>  drivers/usb/gadget/udc/net2280.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
> index 3828c2e..1898a4b 100644
> --- a/drivers/usb/gadget/udc/net2280.c
> +++ b/drivers/usb/gadget/udc/net2280.c
> @@ -3573,7 +3573,11 @@ static void net2280_remove(struct pci_dev *pdev)
>  	BUG_ON(dev->driver);
>  
>  	/* then clean up the resources we allocated during probe() */
> -	net2280_led_shutdown(dev);
> +
> +	if (dev->regs) {
> +		net2280_led_shutdown(dev);
> +		iounmap(dev->regs);
> +	}
>  	if (dev->requests) {
>  		int		i;
>  		for (i = 1; i < 5; i++) {
> @@ -3588,8 +3592,6 @@ static void net2280_remove(struct pci_dev *pdev)
>  		free_irq(pdev->irq, dev);
>  	if (dev->quirks & PLX_PCIE)
>  		pci_disable_msi(pdev);
> -	if (dev->regs)
> -		iounmap(dev->regs);
>  	if (dev->region)
>  		release_mem_region(pci_resource_start(pdev, 0),
>  				pci_resource_len(pdev, 0));

No, you must not move the iounmap() call, because an interrupt could
theoretically occur at any time.

Either just live with an extra test of dev->regs, or else move the 
net2280_led_shutdown() call later.

Alan Stern

[toc] | [prev] | [next] | [standalone]


#1634492 — Re: [PATCH] usb: gadget: udc: add null check before pointer dereference

From"Gustavo A. R. Silva" <garsilva@embeddedor.com>
Date2017-05-02 18:00 +0200
SubjectRe: [PATCH] usb: gadget: udc: add null check before pointer dereference
Message-ID<tCInw-ek-17@gated-at.bofh.it>
In reply to#1634461
Hi Alan,

Quoting Alan Stern <stern@rowland.harvard.edu>:

> On Mon, 1 May 2017, Gustavo A. R. Silva wrote:
>
>> Add null check before dereferencing dev->regs pointer inside
>> net2280_led_shutdown() function.
>>
>> Addresses-Coverity-ID: 101783
>> Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
>> ---
>>  drivers/usb/gadget/udc/net2280.c | 8 +++++---
>>  1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/usb/gadget/udc/net2280.c  
>> b/drivers/usb/gadget/udc/net2280.c
>> index 3828c2e..1898a4b 100644
>> --- a/drivers/usb/gadget/udc/net2280.c
>> +++ b/drivers/usb/gadget/udc/net2280.c
>> @@ -3573,7 +3573,11 @@ static void net2280_remove(struct pci_dev *pdev)
>>  	BUG_ON(dev->driver);
>>
>>  	/* then clean up the resources we allocated during probe() */
>> -	net2280_led_shutdown(dev);
>> +
>> +	if (dev->regs) {
>> +		net2280_led_shutdown(dev);
>> +		iounmap(dev->regs);
>> +	}
>>  	if (dev->requests) {
>>  		int		i;
>>  		for (i = 1; i < 5; i++) {
>> @@ -3588,8 +3592,6 @@ static void net2280_remove(struct pci_dev *pdev)
>>  		free_irq(pdev->irq, dev);
>>  	if (dev->quirks & PLX_PCIE)
>>  		pci_disable_msi(pdev);
>> -	if (dev->regs)
>> -		iounmap(dev->regs);
>>  	if (dev->region)
>>  		release_mem_region(pci_resource_start(pdev, 0),
>>  				pci_resource_len(pdev, 0));
>
> No, you must not move the iounmap() call, because an interrupt could
> theoretically occur at any time.
>

Yeah, I was suspicious about it.

> Either just live with an extra test of dev->regs, or else move the
> net2280_led_shutdown() call later.
>

In this case I think it is safe to move the net2280_led_shutdown()  
call, as the function is only turning off the LEDs.

I'll send a patch shortly.
Thank you
--
Gustavo A. R. Silva

[toc] | [prev] | [next] | [standalone]


#1634533 — [PATCH v2] usb: gadget: udc: add null check before pointer dereference

From"Gustavo A. R. Silva" <garsilva@embeddedor.com>
Date2017-05-02 19:10 +0200
Subject[PATCH v2] usb: gadget: udc: add null check before pointer dereference
Message-ID<tCJtg-17y-23@gated-at.bofh.it>
In reply to#1634492
Add null check before dereferencing dev->regs pointer inside
net2280_led_shutdown() function.

Addresses-Coverity-ID: 101783
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
---
Changes in v2:
  Move the net2280_led_shutdown() call later.

 drivers/usb/gadget/udc/net2280.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index 3828c2e..4f5c0c4 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -3573,7 +3573,6 @@ static void net2280_remove(struct pci_dev *pdev)
 	BUG_ON(dev->driver);
 
 	/* then clean up the resources we allocated during probe() */
-	net2280_led_shutdown(dev);
 	if (dev->requests) {
 		int		i;
 		for (i = 1; i < 5; i++) {
@@ -3588,8 +3587,10 @@ static void net2280_remove(struct pci_dev *pdev)
 		free_irq(pdev->irq, dev);
 	if (dev->quirks & PLX_PCIE)
 		pci_disable_msi(pdev);
-	if (dev->regs)
+	if (dev->regs) {
+		net2280_led_shutdown(dev);
 		iounmap(dev->regs);
+	}
 	if (dev->region)
 		release_mem_region(pci_resource_start(pdev, 0),
 				pci_resource_len(pdev, 0));
-- 
2.5.0

[toc] | [prev] | [next] | [standalone]


#1634571 — Re: [PATCH v2] usb: gadget: udc: add null check before pointer dereference

FromAlan Stern <stern@rowland.harvard.edu>
Date2017-05-02 20:50 +0200
SubjectRe: [PATCH v2] usb: gadget: udc: add null check before pointer dereference
Message-ID<tCL22-1Ui-1@gated-at.bofh.it>
In reply to#1634533
On Tue, 2 May 2017, Gustavo A. R. Silva wrote:

> Add null check before dereferencing dev->regs pointer inside
> net2280_led_shutdown() function.
> 
> Addresses-Coverity-ID: 101783
> Cc: Alan Stern <stern@rowland.harvard.edu>
> Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
> ---
> Changes in v2:
>   Move the net2280_led_shutdown() call later.
> 
>  drivers/usb/gadget/udc/net2280.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
> index 3828c2e..4f5c0c4 100644
> --- a/drivers/usb/gadget/udc/net2280.c
> +++ b/drivers/usb/gadget/udc/net2280.c
> @@ -3573,7 +3573,6 @@ static void net2280_remove(struct pci_dev *pdev)
>  	BUG_ON(dev->driver);
>  
>  	/* then clean up the resources we allocated during probe() */
> -	net2280_led_shutdown(dev);
>  	if (dev->requests) {
>  		int		i;
>  		for (i = 1; i < 5; i++) {
> @@ -3588,8 +3587,10 @@ static void net2280_remove(struct pci_dev *pdev)
>  		free_irq(pdev->irq, dev);
>  	if (dev->quirks & PLX_PCIE)
>  		pci_disable_msi(pdev);
> -	if (dev->regs)
> +	if (dev->regs) {
> +		net2280_led_shutdown(dev);
>  		iounmap(dev->regs);
> +	}
>  	if (dev->region)
>  		release_mem_region(pci_resource_start(pdev, 0),
>  				pci_resource_len(pdev, 0));

Acked-by: Alan Stern <stern@rowland.harvard.edu>

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web