Message ID | 20200208162508.29336-1-colin.king@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | usb: dwc3: debug: remove redundant call to strlen | expand |
Colin King <colin.king@canonical.com> writes: > From: Colin Ian King <colin.king@canonical.com> > > The call to strlen is redundant since the return value is assigned > to variable len but not subsequently used. Remove the redundant > call. > > Addresses-Coverity: ("Unused value") > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > drivers/usb/dwc3/debug.h | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h > index e56beb9d1e36..ee964352c8e2 100644 > --- a/drivers/usb/dwc3/debug.h > +++ b/drivers/usb/dwc3/debug.h > @@ -296,8 +296,6 @@ static inline const char *dwc3_ep_event_string(char *str, size_t size, > status & DEPEVT_STATUS_TRANSFER_ACTIVE ? > " (Active)" : " (Not Active)"); > > - len = strlen(str); > - looking at the code here. The problem is elsewhere: | case DWC3_DEPEVT_XFERNOTREADY: | len = strlen(str); | snprintf(str + len, size - len, "Transfer Not Ready [%d]%s", | event->parameters, | status & DEPEVT_STATUS_TRANSFER_ACTIVE ? | " (Active)" : " (Not Active)"); | | len = strlen(str); | | /* Control Endpoints */ | if (epnum <= 1) { | int phase = DEPEVT_STATUS_CONTROL_PHASE(event->status); | switch (phase) { | case DEPEVT_STATUS_CONTROL_DATA: | snprintf(str + ret, size - ret, | " [Data Phase]"); | break; | case DEPEVT_STATUS_CONTROL_STATUS: | snprintf(str + ret, size - ret, | " [Status Phase]"); these two should use str + len and size - len. However, a better fix would be drop the usage of strlen() and just use the return value from snprintf(). Do you want to produce that patch, instead? It could be two patches: 1. replace ret with len in these two cases (a bug fix, possibly Cc stable) 2. drop usage of strlen() in the entire function (a new feature, for v5.7
On Sat, Feb 08, 2020 at 04:25:08PM +0000, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > The call to strlen is redundant since the return value is assigned > to variable len but not subsequently used. Remove the redundant > call. > > Addresses-Coverity: ("Unused value") > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > drivers/usb/dwc3/debug.h | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h > index e56beb9d1e36..ee964352c8e2 100644 > --- a/drivers/usb/dwc3/debug.h > +++ b/drivers/usb/dwc3/debug.h > @@ -296,8 +296,6 @@ static inline const char *dwc3_ep_event_string(char *str, size_t size, > status & DEPEVT_STATUS_TRANSFER_ACTIVE ? > " (Active)" : " (Not Active)"); > > - len = strlen(str); This code is buggy. It's a mixup between ret and len. Get rid of "ret" and use "len" throughout. Unlike userspace snprintf() the kernel version always returns a positive value. It returns the number of bytes that would have been copied if there were enough space. This code should probably be changed to use scnprintf() which returns the number of bytes which were copied successfully. The remove all the strlen() calls. It should just be += the return. len += scnprintf(str + len, size - len, "Transfer Not Ready [%d] %s", event->parameters, status & DEPEVT_STATUS_TRANSFER_ACTIVE ? "(Active)" : "(Not Active)"); regards, dan carpenter
diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h index e56beb9d1e36..ee964352c8e2 100644 --- a/drivers/usb/dwc3/debug.h +++ b/drivers/usb/dwc3/debug.h @@ -296,8 +296,6 @@ static inline const char *dwc3_ep_event_string(char *str, size_t size, status & DEPEVT_STATUS_TRANSFER_ACTIVE ? " (Active)" : " (Not Active)"); - len = strlen(str); - /* Control Endpoints */ if (epnum <= 1) { int phase = DEPEVT_STATUS_CONTROL_PHASE(event->status);