OSDN Git Service

mptcp: ignore unsupported msg flags
authorPaolo Abeni <pabeni@redhat.com>
Fri, 23 Apr 2021 18:17:07 +0000 (11:17 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Apr 2021 21:06:32 +0000 (14:06 -0700)
Currently mptcp_sendmsg() fails with EOPNOTSUPP if the
user-space provides some unsupported flag. That is unexpected
and may foul existing applications migrated to MPTCP, which
expect a different behavior.

Change the mentioned function to silently ignore the unsupported
flags except MSG_FASTOPEN. This is the only flags currently not
supported by MPTCP with user-space visible side-effects.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/162
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/mptcp/protocol.c

index ae08c56..a996dd5 100644 (file)
@@ -1614,9 +1614,13 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
        int ret = 0;
        long timeo;
 
-       if (msg->msg_flags & ~(MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL))
+       /* we don't support FASTOPEN yet */
+       if (msg->msg_flags & MSG_FASTOPEN)
                return -EOPNOTSUPP;
 
+       /* silently ignore everything else */
+       msg->msg_flags &= MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL;
+
        mptcp_lock_sock(sk, __mptcp_wmem_reserve(sk, min_t(size_t, 1 << 20, len)));
 
        timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
@@ -1951,9 +1955,6 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        if (unlikely(flags & MSG_ERRQUEUE))
                return inet_recv_error(sk, msg, len, addr_len);
 
-       if (msg->msg_flags & ~(MSG_WAITALL | MSG_DONTWAIT))
-               return -EOPNOTSUPP;
-
        mptcp_lock_sock(sk, __mptcp_splice_receive_queue(sk));
        if (unlikely(sk->sk_state == TCP_LISTEN)) {
                copied = -ENOTCONN;