* [PATCH] USB: serial: mos7720: Fix error code in mos7720_write()
@ 2021-01-28 9:35 Dan Carpenter
2021-01-28 9:56 ` Johan Hovold
0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2021-01-28 9:35 UTC (permalink / raw)
To: Johan Hovold; +Cc: Greg Kroah-Hartman, linux-usb, kernel-janitors
This code should return -ENOMEM if the kmalloc() fails but instead
it returns success.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
The first error path is probably wrong as well?
drivers/usb/serial/mos7720.c
1077 /* try to find a free urb in the list */
1078 urb = NULL;
1079
1080 for (i = 0; i < NUM_URBS; ++i) {
1081 if (mos7720_port->write_urb_pool[i] &&
1082 mos7720_port->write_urb_pool[i]->status != -EINPROGRESS) {
1083 urb = mos7720_port->write_urb_pool[i];
1084 dev_dbg(&port->dev, "URB:%d\n", i);
1085 break;
1086 }
1087 }
1088
1089 if (urb == NULL) {
1090 dev_dbg(&port->dev, "%s - no more free urbs\n", __func__);
1091 goto exit;
Should return -ENODEV?
1092 }
drivers/usb/serial/mos7720.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
index ed347a6d50ba..aa55169796a3 100644
--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -1094,8 +1094,10 @@ static int mos7720_write(struct tty_struct *tty, struct usb_serial_port *port,
if (urb->transfer_buffer == NULL) {
urb->transfer_buffer = kmalloc(URB_TRANSFER_BUFFER_SIZE,
GFP_ATOMIC);
- if (!urb->transfer_buffer)
+ if (!urb->transfer_buffer) {
+ bytes_sent = -ENOMEM;
goto exit;
+ }
}
transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE);
--
2.29.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] USB: serial: mos7720: Fix error code in mos7720_write()
2021-01-28 9:35 [PATCH] USB: serial: mos7720: Fix error code in mos7720_write() Dan Carpenter
@ 2021-01-28 9:56 ` Johan Hovold
0 siblings, 0 replies; 2+ messages in thread
From: Johan Hovold @ 2021-01-28 9:56 UTC (permalink / raw)
To: Dan Carpenter
Cc: Johan Hovold, Greg Kroah-Hartman, linux-usb, kernel-janitors
On Thu, Jan 28, 2021 at 12:35:23PM +0300, Dan Carpenter wrote:
> This code should return -ENOMEM if the kmalloc() fails but instead
> it returns success.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> The first error path is probably wrong as well?
>
> drivers/usb/serial/mos7720.c
> 1077 /* try to find a free urb in the list */
> 1078 urb = NULL;
> 1079
> 1080 for (i = 0; i < NUM_URBS; ++i) {
> 1081 if (mos7720_port->write_urb_pool[i] &&
> 1082 mos7720_port->write_urb_pool[i]->status != -EINPROGRESS) {
> 1083 urb = mos7720_port->write_urb_pool[i];
> 1084 dev_dbg(&port->dev, "URB:%d\n", i);
> 1085 break;
> 1086 }
> 1087 }
> 1088
> 1089 if (urb == NULL) {
> 1090 dev_dbg(&port->dev, "%s - no more free urbs\n", __func__);
> 1091 goto exit;
>
> Should return -ENODEV?
No, this bit is correct (modulo the missing locking and reliance on the
URB status). When there are no free URBs we want the tty layer to
retry later.
> 1092 }
>
> drivers/usb/serial/mos7720.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
> index ed347a6d50ba..aa55169796a3 100644
> --- a/drivers/usb/serial/mos7720.c
> +++ b/drivers/usb/serial/mos7720.c
> @@ -1094,8 +1094,10 @@ static int mos7720_write(struct tty_struct *tty, struct usb_serial_port *port,
> if (urb->transfer_buffer == NULL) {
> urb->transfer_buffer = kmalloc(URB_TRANSFER_BUFFER_SIZE,
> GFP_ATOMIC);
> - if (!urb->transfer_buffer)
> + if (!urb->transfer_buffer) {
> + bytes_sent = -ENOMEM;
> goto exit;
> + }
> }
> transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE);
Now applied, thanks.
Johan
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-01-28 9:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-28 9:35 [PATCH] USB: serial: mos7720: Fix error code in mos7720_write() Dan Carpenter
2021-01-28 9:56 ` Johan Hovold
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox