simon-git: putty (master): Simon Tatham

Commits to Tartarus hosted VCS tartarus-commits at lists.tartarus.org
Thu Feb 6 23:55:09 GMT 2020


TL;DR:
  78974fce pollwrap: stop returning unasked-for rwx statuses.

Repository:     https://git.tartarus.org/simon/putty.git
On the web:     https://git.tartarus.org/?p=simon/putty.git
Branch updated: master
Committer:      Simon Tatham <anakin at pobox.com>
Date:           2020-02-06 23:55:09

commit 78974fce896068b099cfc99ac7be27d5fe3bb075
web diff https://git.tartarus.org/?p=simon/putty.git;a=commitdiff;h=78974fce896068b099cfc99ac7be27d5fe3bb075;hp=bf0f323fb47c34f392a09c3bc1359a82e8339959
Author: Simon Tatham <anakin at pobox.com>
Date:   Thu Feb 6 23:48:36 2020 +0000

    pollwrap: stop returning unasked-for rwx statuses.
    
    The sets of poll(2) events that we check in order to return SELECT_R
    and SELECT_W overlap: to be precise, they have POLLERR in common. So
    if an fd signals POLLERR, then pollwrap_get_fd_rwx will respond by
    saying that it has both SELECT_R and SELECT_W available on it - even
    if the caller had only asked for one of those.
    
    In other words, you can get a spurious SELECT_W notification on an fd
    that you never asked for SELECT_W on in the first place. This
    definitely isn't what I'd meant that API to do.
    
    In particular, if a socket in the middle of an asynchronous connect()
    signals POLLERR, then Unix Plink will call select_result for it with
    SELECT_R and then SELECT_W respectively. The former will notice that
    it's got an error condition and call plug_closing - and _then_ the
    latter will decide that it's writable and set s->connected! The plan
    was to only select it for write until it was connected, but this bug
    in pollwrap was defeating that plan.
    
    Now pollwrap_get_fd_rwx should only ever return a set of rwx flags
    that's a subset of the one that the client asked for via
    pollwrap_add_fd_rwx.

 unix/uxpoll.c | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)



More information about the tartarus-commits mailing list