Messages in this thread | | | Date | Wed, 26 Aug 2020 16:40:06 +0200 | From | Greg KH <> | Subject | Re: [PATCH] misc: rtsx: improve status check |
| |
On Wed, Aug 26, 2020 at 06:53:37AM -0700, trix@redhat.com wrote: > From: Tom Rix <trix@redhat.com> > > clang static analysis flags this error > > rtsx_usb.c:505:10: warning: The left operand of '&' > is a garbage value > if (val & cd_mask[card]) > ~~~ ^ > > val is set when rtsx_usb_get_card_status() is successful. The > problem is how it checks its callers returns. > > /* usb_control_msg may return positive when success */ > if (ret < 0) > return ret; > > This is correct for the usb_control_msg() the call. However, > the call to rtsx_usb_get_status_with_bulk is only successful > when 0 is returned. > > So make status checking block specific. > > Fixes: 730876be2566 ("mfd: Add realtek USB card reader driver") > Signed-off-by: Tom Rix <trix@redhat.com> > --- > drivers/misc/cardreader/rtsx_usb.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/misc/cardreader/rtsx_usb.c b/drivers/misc/cardreader/rtsx_usb.c > index 59eda55d92a3..bd392b0c66af 100644 > --- a/drivers/misc/cardreader/rtsx_usb.c > +++ b/drivers/misc/cardreader/rtsx_usb.c > @@ -304,14 +304,15 @@ int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status) > *status = *buf; > > kfree(buf); > + > + /* usb_control_msg may return positive when success */
it _WILL_ return positive. it will return negative for an error. It will never return 0.
> + if (ret < 0) > + return ret; > } else { > ret = rtsx_usb_get_status_with_bulk(ucr, status); > + if (ret) > + return ret; > } > - > - /* usb_control_msg may return positive when success */ > - if (ret < 0) > - return ret; > -
I fail to see how this code is incorrect today.
Well, I do see a bug in here, but you aren't fixing it (short read is not checked), see the recent linux-usb@vger mail thread about that problem that we will be fixing tree-wide over time soon...
How can your move of these lines modify anything?
thanks,
greg k-h
| |