lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 070/131] rxrpc: Fix handling of rwind from an ACK packet
    Date
    From: David Howells <dhowells@redhat.com>

    [ Upstream commit a2ad7c21ad8cf1ce4ad65e13df1c2a1c29b38ac5 ]

    The handling of the receive window size (rwind) from a received ACK packet
    is not correct. The rxrpc_input_ackinfo() function currently checks the
    current Tx window size against the rwind from the ACK to see if it has
    changed, but then limits the rwind size before storing it in the tx_winsize
    member and, if it increased, wake up the transmitting process. This means
    that if rwind > RXRPC_RXTX_BUFF_SIZE - 1, this path will always be
    followed.

    Fix this by limiting rwind before we compare it to tx_winsize.

    The effect of this can be seen by enabling the rxrpc_rx_rwind_change
    tracepoint.

    Fixes: 702f2ac87a9a ("rxrpc: Wake up the transmitter if Rx window size increases on the peer")
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/rxrpc/input.c | 7 +++----
    1 file changed, 3 insertions(+), 4 deletions(-)

    diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
    index e65b230fce4c4..58bd558a277a4 100644
    --- a/net/rxrpc/input.c
    +++ b/net/rxrpc/input.c
    @@ -735,13 +735,12 @@ static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
    ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU),
    rwind, ntohl(ackinfo->jumbo_max));

    + if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
    + rwind = RXRPC_RXTX_BUFF_SIZE - 1;
    if (call->tx_winsize != rwind) {
    - if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
    - rwind = RXRPC_RXTX_BUFF_SIZE - 1;
    if (rwind > call->tx_winsize)
    wake = true;
    - trace_rxrpc_rx_rwind_change(call, sp->hdr.serial,
    - ntohl(ackinfo->rwind), wake);
    + trace_rxrpc_rx_rwind_change(call, sp->hdr.serial, rwind, wake);
    call->tx_winsize = rwind;
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 22:05    [W:2.736 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site