Skip to content

Commit

Permalink
net: introduce and use custom sockopt socket flag
Browse files Browse the repository at this point in the history
We will soon introduce custom setsockopt for UDP sockets, too.
Instead of doing even more complex arbitrary checks inside
sock_use_custom_sol_socket(), add a new socket flag and set it
for the relevant socket types (currently only MPTCP).

Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Paolo Abeni authored and davem330 committed Oct 24, 2022
1 parent ea5ed0f commit a5ef058
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 7 deletions.
1 change: 1 addition & 0 deletions include/linux/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ struct net;
#define SOCK_NOSPACE 2
#define SOCK_PASSCRED 3
#define SOCK_PASSSEC 4
#define SOCK_CUSTOM_SOCKOPT 5

#ifndef ARCH_HAS_SOCKET_TYPES
/**
Expand Down
4 changes: 4 additions & 0 deletions net/mptcp/protocol.c
Original file line number Diff line number Diff line change
Expand Up @@ -2708,6 +2708,8 @@ static int mptcp_init_sock(struct sock *sk)
if (ret)
return ret;

set_bit(SOCK_CUSTOM_SOCKOPT, &sk->sk_socket->flags);

/* fetch the ca name; do it outside __mptcp_init_sock(), so that clone will
* propagate the correct value
*/
Expand Down Expand Up @@ -3684,6 +3686,8 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock,
struct mptcp_subflow_context *subflow;
struct sock *newsk = newsock->sk;

set_bit(SOCK_CUSTOM_SOCKOPT, &newsock->flags);

lock_sock(newsk);

/* PM/worker can now acquire the first subflow socket
Expand Down
8 changes: 1 addition & 7 deletions net/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -2199,13 +2199,7 @@ SYSCALL_DEFINE4(recv, int, fd, void __user *, ubuf, size_t, size,

static bool sock_use_custom_sol_socket(const struct socket *sock)
{
const struct sock *sk = sock->sk;

/* Use sock->ops->setsockopt() for MPTCP */
return IS_ENABLED(CONFIG_MPTCP) &&
sk->sk_protocol == IPPROTO_MPTCP &&
sk->sk_type == SOCK_STREAM &&
(sk->sk_family == AF_INET || sk->sk_family == AF_INET6);
return test_bit(SOCK_CUSTOM_SOCKOPT, &sock->flags);
}

/*
Expand Down

0 comments on commit a5ef058

Please sign in to comment.