[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <9fdb5e30-8570-420f-940b-bea5fa72e12d@suse.com>
Date: Mon, 7 Apr 2025 11:23:03 +0200
From: Oliver Neukum <oneukum@...e.com>
To: Robert Hodaszi <robert.hodaszi@...i.com>, gregkh@...uxfoundation.org,
oneukum@...e.com
Cc: linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org,
stern@...land.harvard.edu, viro@...iv.linux.org.uk
Subject: Re: [PATCH] usb: cdc-wdm: avoid setting WDM_READ for ZLP-s
On 03.04.25 16:40, Robert Hodaszi wrote:
> Don't set WDM_READ flag in wdm_in_callback() for ZLP-s, otherwise when
> userspace tries to poll for available data, it might - incorrectly -
> believe there is something available, and when it tries to non-blocking
> read it, it might get stuck in the read loop.
>
> For example this is what glib does for non-blocking read (briefly):
>
> 1. poll
> 2. if poll returns with non-zero, starts a read data loop:
> a. loop on poll() (EINTR disabled)
> b. if revents was set, reads data
> I. if read returns with EINTR or EAGAIN, goto 2.a.
> II. otherwise return with data
>
> So if ZLP sets WDM_READ (#1), we expect data, and try to read it (#2).
> But as that was a ZLP, and we are doing non-blocking read, wdm_read()
> returns with EAGAIN (#2.b.I), so loop again, and try to read again
> (#2.a.).
>
> With glib, we might stuck in this loop forever, as EINTR is disabled
> (#2.a).
>
> Signed-off-by: Robert Hodaszi <robert.hodaszi@...i.com>
Acked-by: Oliver Neukum <oneukum@...e.com>
Powered by blists - more mailing lists