diff options
Diffstat (limited to 'net/mptcp/sockopt.c')
| -rw-r--r-- | net/mptcp/sockopt.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index d4b1e6ec1b36..7f2c3727ab23 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -760,14 +760,21 @@ static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,  static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,  					  sockptr_t optval, unsigned int optlen)  { +	struct sock *sk = (struct sock *)msk;  	struct socket *sock; +	int ret = -EINVAL;  	/* Limit to first subflow, before the connection establishment */ +	lock_sock(sk);  	sock = __mptcp_nmpc_socket(msk);  	if (!sock) -		return -EINVAL; +		goto unlock; -	return tcp_setsockopt(sock->sk, level, optname, optval, optlen); +	ret = tcp_setsockopt(sock->sk, level, optname, optval, optlen); + +unlock: +	release_sock(sk); +	return ret;  }  static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,  |