lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ