lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Tue, 31 Mar 2020 00:32:44 +0200
From:   Stefano Brivio <sbrivio@...hat.com>
To:     "John B. Wyatt IV" <jbwyatt4@...il.com>
Cc:     outreachy-kernel@...glegroups.com,
        Julia Lawall <julia.lawall@...ia.fr>,
        Forest Bond <forest@...ttletooquiet.net>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Quentin Deslandes <quentin.deslandes@...ev.co.uk>,
        Colin Ian King <colin.king@...onical.com>,
        Malcolm Priestley <tvboxspy@...il.com>,
        devel@...verdev.osuosl.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6] staging: vt6656: add error code handling to unused
 variable

On Mon, 30 Mar 2020 15:26:04 -0700
"John B. Wyatt IV" <jbwyatt4@...il.com> wrote:

> On Tue, 2020-03-31 at 00:01 +0200, Stefano Brivio wrote:
> > On Mon, 30 Mar 2020 14:46:13 -0700
> > "John B. Wyatt IV" <jbwyatt4@...il.com> wrote:
> >   
> > > Add error code handling to unused 'ret' variable that was never
> > > used.
> > > Return an error code from functions called within
> > > vnt_radio_power_on.
> > > 
> > > Issue reported by coccinelle (coccicheck).
> > > 
> > > Suggested-by: Quentin Deslandes <quentin.deslandes@...ev.co.uk>
> > > Suggested-by: Stefano Brivio <sbrivio@...hat.com>
> > > Reviewed-by: Quentin Deslandes <quentin.deslandes@...ev.co.uk>
> > > Signed-off-by: John B. Wyatt IV <jbwyatt4@...il.com>
> > > ---
> > > v6: Forgot to add all the v5 code to commit.
> > > 
> > > v5: Remove Suggested-by: Julia Lawall above seperator line.
> > > 	Remove break; statement in switch block.
> > > 	break; removal checked by both gcc compile and checkpatch.
> > > 	Suggested by Stefano Brivio <sbrivio@...hat.com>
> > > 
> > > v4: Move Suggested-by: Julia Lawall above seperator line.
> > >     Add Reviewed-by tag as requested by Quentin Deslandes.
> > > 
> > > v3: Forgot to add v2 code changes to commit.
> > > 
> > > v2: Replace goto statements with return.
> > >     Remove last if check because it was unneeded.
> > >     Suggested-by: Julia Lawall <julia.lawall@...ia.fr>
> > > 
> > >  drivers/staging/vt6656/card.c | 20 ++++++++++++--------
> > >  1 file changed, 12 insertions(+), 8 deletions(-)
> > > 
> > > diff --git a/drivers/staging/vt6656/card.c
> > > b/drivers/staging/vt6656/card.c
> > > index dc3ab10eb630..c947e8188384 100644
> > > --- a/drivers/staging/vt6656/card.c
> > > +++ b/drivers/staging/vt6656/card.c
> > > @@ -723,9 +723,13 @@ int vnt_radio_power_on(struct vnt_private
> > > *priv)
> > >  {
> > >  	int ret = 0;
> > >  
> > > -	vnt_exit_deep_sleep(priv);
> > > +	ret = vnt_exit_deep_sleep(priv);
> > > +	if (ret)
> > > +		return ret;
> > >  
> > > -	vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON);
> > > +	ret = vnt_mac_reg_bits_on(priv, MAC_REG_HOSTCR, HOSTCR_RXON);
> > > +	if (ret)
> > > +		return ret;
> > >  
> > >  	switch (priv->rf_type) {
> > >  	case RF_AL2230:
> > > @@ -734,14 +738,14 @@ int vnt_radio_power_on(struct vnt_private
> > > *priv)
> > >  	case RF_VT3226:
> > >  	case RF_VT3226D0:
> > >  	case RF_VT3342A0:
> > > -		vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL,
> > > -				    (SOFTPWRCTL_SWPE2 |
> > > SOFTPWRCTL_SWPE3));
> > > -		break;
> > > +		ret = vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL,
> > > +					  (SOFTPWRCTL_SWPE2 | 
> > > +					  SOFTPWRCTL_SWPE3));
> > >  	}
> > > +	if (ret)
> > > +		return ret;  
> > 
> > Hmm, sorry, I haven't been clear enough I guess.
> > 
> > This is what you're doing:
> > 
> > if rf_type is not in that list:
> > - set some bits in a register
> > - did it fail? return
> > - did it fail? return
> > ...
> > 
> > if rf_type is in that list:
> > - set some bits in a register
> > - did it fail? return
> > - set some other bits
> > - did it fail? return
> > ...
> > 
> > Now, the "set some other bits" part is already selected depending on
> > rf_type. There's no need to check 'ret' otherwise, so you can move
> > the
> > return just after setting 'ret', in the switch case.
> >   
> 
> Thank you for pointing that out Stefano. That would be a serious issue
> with logic.
> 
> Just to be sure. Are you looking for this?
> 
> switch (priv->rf_type) {
> case RF_AL2230:
> case RF_AL2230S:
> case RF_AIROHA7230:
> case RF_VT3226:
> case RF_VT3226D0:
> case RF_VT3342A0:
> 	ret = vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL,
> 				  (SOFTPWRCTL_SWPE2 | 
> 				  SOFTPWRCTL_SWPE3));
> 	if (ret)
> 		return ret;
> }

Exactly.

> > With a check, because you don't want to return if ret == 0.
> >   
> 
> What do you mean exactly by this?

Exactly what you wrote above: if (ret) ...

> The new code should only return a 0 at the end of the function with the
> vnt_mac_reg_bits_off call.

That, or an error code if vnt_mac_reg_bits_off() fails.

-- 
Stefano

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ