OSDN Git Service

mptcp: revert "mptcp: forbit mcast-related sockopt on MPTCP sockets"
authorMatthieu Baerts <matthieu.baerts@tessares.net>
Thu, 15 Apr 2021 23:44:50 +0000 (16:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Apr 2021 22:23:09 +0000 (15:23 -0700)
This change reverts commit 86581852d771 ("mptcp: forbit mcast-related sockopt on MPTCP sockets").

As announced in the cover letter of the mentioned patch above, the
following commits introduce a larger MPTCP sockopt implementation
refactor.

This time, we switch from a blocklist to an allowlist. This is safer for
the future where new sockoptions could be added while not being fully
supported with MPTCP sockets and thus causing unstabilities.

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
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 8009b3f..2fcdc61 100644 (file)
@@ -2869,48 +2869,6 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
        return ret;
 }
 
-static bool mptcp_unsupported(int level, int optname)
-{
-       if (level == SOL_IP) {
-               switch (optname) {
-               case IP_ADD_MEMBERSHIP:
-               case IP_ADD_SOURCE_MEMBERSHIP:
-               case IP_DROP_MEMBERSHIP:
-               case IP_DROP_SOURCE_MEMBERSHIP:
-               case IP_BLOCK_SOURCE:
-               case IP_UNBLOCK_SOURCE:
-               case MCAST_JOIN_GROUP:
-               case MCAST_LEAVE_GROUP:
-               case MCAST_JOIN_SOURCE_GROUP:
-               case MCAST_LEAVE_SOURCE_GROUP:
-               case MCAST_BLOCK_SOURCE:
-               case MCAST_UNBLOCK_SOURCE:
-               case MCAST_MSFILTER:
-                       return true;
-               }
-               return false;
-       }
-       if (level == SOL_IPV6) {
-               switch (optname) {
-               case IPV6_ADDRFORM:
-               case IPV6_ADD_MEMBERSHIP:
-               case IPV6_DROP_MEMBERSHIP:
-               case IPV6_JOIN_ANYCAST:
-               case IPV6_LEAVE_ANYCAST:
-               case MCAST_JOIN_GROUP:
-               case MCAST_LEAVE_GROUP:
-               case MCAST_JOIN_SOURCE_GROUP:
-               case MCAST_LEAVE_SOURCE_GROUP:
-               case MCAST_BLOCK_SOURCE:
-               case MCAST_UNBLOCK_SOURCE:
-               case MCAST_MSFILTER:
-                       return true;
-               }
-               return false;
-       }
-       return false;
-}
-
 static int mptcp_setsockopt(struct sock *sk, int level, int optname,
                            sockptr_t optval, unsigned int optlen)
 {
@@ -2919,9 +2877,6 @@ static int mptcp_setsockopt(struct sock *sk, int level, int optname,
 
        pr_debug("msk=%p", msk);
 
-       if (mptcp_unsupported(level, optname))
-               return -ENOPROTOOPT;
-
        if (level == SOL_SOCKET)
                return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen);