mptcp: setsockopt: SO_DEBUG and no-op options
authorFlorian Westphal <fw@strlen.de>
Thu, 15 Apr 2021 23:45:00 +0000 (16:45 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Apr 2021 22:23:10 +0000 (15:23 -0700)
Handle SO_DEBUG and set it on all subflows.
Ignore those values not implemented on TCP sockets.

Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/mptcp/sockopt.c

index 7eb6374..390433b 100644 (file)
@@ -77,6 +77,9 @@ static void mptcp_sol_socket_sync_intval(struct mptcp_sock *msk, int optname, in
                bool slow = lock_sock_fast(ssk);
 
                switch (optname) {
+               case SO_DEBUG:
+                       sock_valbool_flag(ssk, SOCK_DBG, !!val);
+                       break;
                case SO_KEEPALIVE:
                        if (ssk->sk_prot->keepalive)
                                ssk->sk_prot->keepalive(ssk, !!val);
@@ -150,6 +153,7 @@ static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname,
        case SO_KEEPALIVE:
                mptcp_sol_socket_sync_intval(msk, optname, val);
                return 0;
+       case SO_DEBUG:
        case SO_MARK:
        case SO_PRIORITY:
        case SO_SNDBUF:
@@ -246,9 +250,21 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
        case SO_RCVBUFFORCE:
        case SO_MARK:
        case SO_INCOMING_CPU:
+       case SO_DEBUG:
                return mptcp_setsockopt_sol_socket_int(msk, optname, optval, optlen);
        case SO_LINGER:
                return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen);
+       case SO_NO_CHECK:
+       case SO_DONTROUTE:
+       case SO_BROADCAST:
+       case SO_BSDCOMPAT:
+       case SO_PASSCRED:
+       case SO_PASSSEC:
+       case SO_RXQ_OVFL:
+       case SO_WIFI_STATUS:
+       case SO_NOFCS:
+       case SO_SELECT_ERR_QUEUE:
+               return 0;
        }
 
        return sock_setsockopt(sk->sk_socket, SOL_SOCKET, optname, optval, optlen);