2012-02-08 21:14:45

by Simon Graham

[permalink] [raw]
Subject: [PATCH V2] rtlwifi: Return correct failure code on error

Callers of rtl_pci_init expect zero to be returned on error. Returning
the error code leads to the data being used when it shouldn't causing,
amongst other things, divide by zero panics attempting to use the
ring size that is set to zero.

Signed-off-by: Simon Graham <[email protected]>
---
drivers/net/wireless/rtlwifi/pci.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index fb84707..f0ce366 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -1492,7 +1492,7 @@ static int rtl_pci_init(struct ieee80211_hw *hw, struct pci_dev *pdev)
if (err) {
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
"tx ring initialization failed\n");
- return err;
+ return 0;
}

return 1;
--
1.7.8.3



2012-02-09 01:59:44

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH V2] rtlwifi: Return correct failure code on error

On 02/08/2012 03:14 PM, Simon Graham wrote:
> Callers of rtl_pci_init expect zero to be returned on error. Returning
> the error code leads to the data being used when it shouldn't causing,
> amongst other things, divide by zero panics attempting to use the
> ring size that is set to zero.
>
> Signed-off-by: Simon Graham<[email protected]>
> ---
> drivers/net/wireless/rtlwifi/pci.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
> index fb84707..f0ce366 100644
> --- a/drivers/net/wireless/rtlwifi/pci.c
> +++ b/drivers/net/wireless/rtlwifi/pci.c
> @@ -1492,7 +1492,7 @@ static int rtl_pci_init(struct ieee80211_hw *hw, struct pci_dev *pdev)
> if (err) {
> RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
> "tx ring initialization failed\n");
> - return err;
> + return 0;
> }
>
> return 1;

You must have an extreme memory limitation to find all these problems.

As long as you are reworking this section, I would prefer you leave the "return
err" as it is now, change the "return 1" to "return 0", and remove the not
operator in "err = !rtl_pci_init(hw, pdev);" call of this routine. I just
discovered it a few days ago, and it bothers me, but I've been too busy to
submit a fix. In addition, these changes will convert rtl_pci_init() into a more
normal routine that returns 0 if OK and non-zero on errors.

Larry

2012-02-09 02:18:39

by Simon Graham

[permalink] [raw]
Subject: RE: [PATCH V2] rtlwifi: Return correct failure code on error

> > return 1;
>
> You must have an extreme memory limitation to find all these problems.
>

As part of system testing we do

> As long as you are reworking this section, I would prefer you leave
the
> "return
> err" as it is now, change the "return 1" to "return 0", and remove the
> not
> operator in "err = !rtl_pci_init(hw, pdev);" call of this routine. I
> just
> discovered it a few days ago, and it bothers me, but I've been too
busy
> to
> submit a fix. In addition, these changes will convert rtl_pci_init()
> into a more
> normal routine that returns 0 if OK and non-zero on errors.
>

OK - I'll do that tomorrow and resubmit (hopefully correctly this time!)

> Larry