diff mbox

[-next] ath9k: fix ath9k_hw_nvram_check_version()

Message ID 20151219105919.GB3749@mwanda (mailing list archive)
State Accepted
Delegated to: Kalle Valo
Headers show

Commit Message

Dan Carpenter Dec. 19, 2015, 10:59 a.m. UTC
There is a type bug so it always returns success.

Fixes: 6fa658fd5ab2 ('ath9k: Simplify and fix eeprom endianness swapping')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Martin Blumenstingl Dec. 19, 2015, 11:12 a.m. UTC | #1
On Sat, Dec 19, 2015 at 11:59 AM, Dan Carpenter
<dan.carpenter@oracle.com> wrote:
> There is a type bug so it always returns success.
>
> Fixes: 6fa658fd5ab2 ('ath9k: Simplify and fix eeprom endianness swapping')
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>


Thank you for finding and fixing this one!
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Joe Perches Dec. 20, 2015, 6:47 p.m. UTC | #2
On Sat, 2015-12-19 at 13:59 +0300, Dan Carpenter wrote:
> There is a type bug so it always returns success.

How many false positives do you have to sift
through to find this sort of error?

> +++ b/drivers/net/wireless/ath/ath9k/eeprom.c
> @@ -206,7 +206,7 @@ bool ath9k_hw_nvram_check_version(struct ath_hw *ah, int version, int minrev)
>  		ath_err(common, "Bad EEPROM VER 0x%04x or REV 0x%04x\n",
>  			ah->eep_ops->get_eeprom_ver(ah),
>  			ah->eep_ops->get_eeprom_rev(ah));
> -		return -EINVAL;
> +		return false;
>  	}
>  
>  	return true;

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Julia Lawall Dec. 20, 2015, 7 p.m. UTC | #3
On Sun, 20 Dec 2015, Joe Perches wrote:

> On Sat, 2015-12-19 at 13:59 +0300, Dan Carpenter wrote:
> > There is a type bug so it always returns success.
> 
> How many false positives do you have to sift
> through to find this sort of error?

The return type is thoughtfully bool, so it should be easy in this case.  
The function has a return -EINVAL and a return true, so even without the 
return type it would be locally apparent that there is an inconsistency.

julia

> 
> > +++ b/drivers/net/wireless/ath/ath9k/eeprom.c
> > @@ -206,7 +206,7 @@ bool ath9k_hw_nvram_check_version(struct ath_hw *ah, int version, int minrev)
> >  		ath_err(common, "Bad EEPROM VER 0x%04x or REV 0x%04x\n",
> >  			ah->eep_ops->get_eeprom_ver(ah),
> >  			ah->eep_ops->get_eeprom_rev(ah));
> > -		return -EINVAL;
> > +		return false;
> >  	}
> >  
> >  	return true;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
Joe Perches Dec. 20, 2015, 7:05 p.m. UTC | #4
On Sun, 2015-12-20 at 20:00 +0100, Julia Lawall wrote:
> On Sun, 20 Dec 2015, Joe Perches wrote:
> 
> > On Sat, 2015-12-19 at 13:59 +0300, Dan Carpenter wrote:
> > > There is a type bug so it always returns success.
> > 
> > How many false positives do you have to sift
> > through to find this sort of error?
> 
> The return type is thoughtfully bool, so it should be easy in this case.  
> The function has a return -EINVAL and a return true, so even without the 
> return type it would be locally apparent that there is an inconsistency.

True, -EINVAL is a non-bool constant, but
bool returns can be a variable int.

Dan, was the check any constant non-bool?

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dan Carpenter Dec. 20, 2015, 8:33 p.m. UTC | #5
On Sun, Dec 20, 2015 at 11:05:55AM -0800, Joe Perches wrote:
> On Sun, 2015-12-20 at 20:00 +0100, Julia Lawall wrote:
> > On Sun, 20 Dec 2015, Joe Perches wrote:
> > 
> > > On Sat, 2015-12-19 at 13:59 +0300, Dan Carpenter wrote:
> > > > There is a type bug so it always returns success.
> > > 
> > > How many false positives do you have to sift
> > > through to find this sort of error?
> > 
> > The return type is thoughtfully bool, so it should be easy in this case.  
> > The function has a return -EINVAL and a return true, so even without the 
> > return type it would be locally apparent that there is an inconsistency.
> 
> True, -EINVAL is a non-bool constant, but
> bool returns can be a variable int.
> 
> Dan, was the check any constant non-bool?

This warning is for returning negative with unsigned types smaller than
int.  It's doing cross function flow analysis so it could warning about
other things besides constants, but it's 90% constants.  It warns
about ds2482_w1_triplet() for example.

There aren't many false positives.

regards,
dan carpenter

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kalle Valo Jan. 7, 2016, 1:05 p.m. UTC | #6
Dan Carpenter <dan.carpenter@oracle.com> writes:

> There is a type bug so it always returns success.
>
> Fixes: 6fa658fd5ab2 ('ath9k: Simplify and fix eeprom endianness swapping')
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

Applied to ath.git, thanks.
diff mbox

Patch

diff --git a/drivers/net/wireless/ath/ath9k/eeprom.c b/drivers/net/wireless/ath/ath9k/eeprom.c
index f8c5065..a7afdee 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom.c
+++ b/drivers/net/wireless/ath/ath9k/eeprom.c
@@ -206,7 +206,7 @@  bool ath9k_hw_nvram_check_version(struct ath_hw *ah, int version, int minrev)
 		ath_err(common, "Bad EEPROM VER 0x%04x or REV 0x%04x\n",
 			ah->eep_ops->get_eeprom_ver(ah),
 			ah->eep_ops->get_eeprom_rev(ah));
-		return -EINVAL;
+		return false;
 	}
 
 	return true;