mptcp: don't grow mptcp socket receive buffer when rcvbuf is locked
authorFlorian Westphal <fw@strlen.de>
Fri, 6 Mar 2020 20:29:46 +0000 (21:29 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 10 Mar 2020 02:30:08 +0000 (19:30 -0700)
The mptcp rcvbuf size is adjusted according to the subflow rcvbuf size.
This should not be done if userspace did set a fixed value.

Fixes: 600911ff5f72bae ("mptcp: add rmem queue accounting")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/mptcp/protocol.c

index 4c075a9f7ed00975a546e26a51dce79f6964f5ed..95007e433109ec5b7c11fdf5405046d2d90097db 100644 (file)
@@ -141,11 +141,13 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
        bool more_data_avail;
        struct tcp_sock *tp;
        bool done = false;
-       int rcvbuf;
 
-       rcvbuf = max(ssk->sk_rcvbuf, sk->sk_rcvbuf);
-       if (rcvbuf > sk->sk_rcvbuf)
-               sk->sk_rcvbuf = rcvbuf;
+       if (!(sk->sk_userlocks & SOCK_RCVBUF_LOCK)) {
+               int rcvbuf = max(ssk->sk_rcvbuf, sk->sk_rcvbuf);
+
+               if (rcvbuf > sk->sk_rcvbuf)
+                       sk->sk_rcvbuf = rcvbuf;
+       }
 
        tp = tcp_sk(ssk);
        do {