OpenAFS Master Repository branch, master, updated. openafs-devel-1_9_0-83-g3f9a08d

Gerrit Code Review gerrit@openafs.org
Tue, 29 Dec 2020 15:14:48 -0500


The following commit has been merged in the master branch:
commit 3f9a08db86f951df3f6f69f1143f17dd7b43b150
Author: Mark Vitale <mvitale@sinenomine.net>
Date:   Thu Aug 8 18:18:22 2019 -0400

    rx: Avoid new server calls for non-DATA packets
    
    Normally, a client starts a new Rx call by sending DATA packets for
    that call to a server, and rxi_ReceiveServerCall on the server creates
    a new call struct for that call (since we don't recognize it as an
    existing call).
    
    Under certain circumstances, it's possible for a server to see a
    non-DATA packet as the first packet for a call, and currently
    rxi_ReceiveServerCall will create a new server call for any packet
    type. The call cannot actually proceed until the server receives data
    from the client (and goes through the challenge/response auth
    handshake, if needed), but usually this is harmless, since the
    existence of any packets for a particular call channel indicate that
    the client is trying to run such a call. The server will respond to
    the client with ACKs to indicate that it is missing the needed DATA
    packet(s), and the client will send them and the call can proceed.
    
    However, if a call is in the middle of running when the server is
    restarted, the client may be sending ACKs for a pre-existing call that
    the server doesn't know about. In this case, the server generates ACKs
    that indicate the server has not received any DATA packets, which may
    appear to violate the protocol, depending on the prior state of the
    call (e.g. the server appears to try to move the window backwards).
    
    Clients should be able to detect this and kill the call, but many do
    not. For many OpenAFS releases before commit 7b204946 (rx: Avoid
    lastReceiveTime update for invalid ACKs), the client will get confused
    in this situation and will keep the call open forever, never making
    progress.
    
    There isn't any benefit to creating a new server call in these
    situations, so just ignore non-DATA packets for unrecognized calls, to
    avoid stalled calls from such clients. Those clients will not get a
    response from the server, and so the call will eventually die from the
    normal Rx call timeout.
    
    Change-Id: I565625ba8b6901f9b745124a8816a9ba816c0264
    Reviewed-on: https://gerrit.openafs.org/13758
    Tested-by: BuildBot <buildbot@rampaginggeek.com>
    Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

 src/rx/rx.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

-- 
OpenAFS Master Repository