[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <TY2PR01MB36929E9390A48F6FC7042AF8D8929@TY2PR01MB3692.jpnprd01.prod.outlook.com>
Date: Tue, 9 Mar 2021 11:59:39 +0000
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com>
To: Jia-Ju Bai <baijiaju1990@...il.com>
CC: "linux-usb@...r.kernel.org" <linux-usb@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>
Subject: RE: [PATCH] usb: renesas_usbhs: fix error return code of
usbhsf_pkt_handler()
Hi Jia-Ju,
Thank you for the patch!
> From: Jia-Ju Bai, Sent: Sunday, March 7, 2021 6:01 PM
>
> When __usbhsf_pkt_get() returns NULL to pkt, no error return code of
> usbhsf_pkt_handler() is assigned.
Yes. Also I realized that no error return code of usbhsf_pkt_handler()
was assigned if the type value was unexpected value. So, I'm thinking
initial value of ret should be -EINVAL instead of 0.
---
int ret = 0; // should be -EINVAL
int is_done = 0;
/******************** spin lock ********************/
usbhs_lock(priv, flags);
pkt = __usbhsf_pkt_get(pipe);
if (!pkt)
goto __usbhs_pkt_handler_end;
switch (type) {
case USBHSF_PKT_PREPARE:
func = pkt->handler->prepare;
break;
case USBHSF_PKT_TRY_RUN:
func = pkt->handler->try_run;
break;
case USBHSF_PKT_DMA_DONE:
func = pkt->handler->dma_done;
break;
default:
dev_err(dev, "unknown pkt handler\n");
goto __usbhs_pkt_handler_end; /// here
}
if (likely(func)) /// [1]
ret = func(pkt, &is_done);
[1] This is always true here, so ret is always assigned by the func().
---
> To fix this bug, ret is assigned with -EINVAL in this case.
Just a record: After fixed this, actual behavior is almost the same
except printing error message.
Best regards,
Yoshihiro Shimoda
Powered by blists - more mailing lists