Message ID | 20250314-net-mptcp-fix-data-stream-corr-sockopt-v1-3-122dbb249db3@kernel.org (mailing list archive) |
---|---|
State | Mainlined, archived |
Delegated to: | Matthieu Baerts |
Headers | show |
Series | mptcp: fix data stream corruption and missing sockopts | expand |
On Fri, Mar 14, 2025 at 09:11:33PM +0100, Matthieu Baerts (NGI0) wrote: > When adding a socket option support in MPTCP, both the get and set parts > are supposed to be implemented. > > IP(V6)_FREEBIND and IP(V6)_TRANSPARENT support for the setsockopt part > has been added a while ago, but it looks like the get part got > forgotten. It should have been present as a way to verify a setting has > been set as expected, and not to act differently from TCP or any other > socket types. > > Everything was in place to expose it, just the last step was missing. > Only new code is added to cover these specific getsockopt(), that seems > safe. > > Fixes: c9406a23c116 ("mptcp: sockopt: add SOL_IP freebind & transparent options") > Cc: stable@vger.kernel.org > Reviewed-by: Mat Martineau <martineau@kernel.org> > Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Hi Matthieu, all, As per my comment on patch 2/3, I would lean towards this being net-next material rather than a fix for net. But that notwithstanding this looks good to me. Reviewed-by: Simon Horman <horms@kernel.org>
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 4b99eb796855e4578d14df90f9d1cc3f1cd5b8c7..3caa0a9d3b3885ce6399570f2d98a2e8f103638d 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -1419,6 +1419,12 @@ static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname, switch (optname) { case IP_TOS: return mptcp_put_int_option(msk, optval, optlen, READ_ONCE(inet_sk(sk)->tos)); + case IP_FREEBIND: + return mptcp_put_int_option(msk, optval, optlen, + inet_test_bit(FREEBIND, sk)); + case IP_TRANSPARENT: + return mptcp_put_int_option(msk, optval, optlen, + inet_test_bit(TRANSPARENT, sk)); case IP_BIND_ADDRESS_NO_PORT: return mptcp_put_int_option(msk, optval, optlen, inet_test_bit(BIND_ADDRESS_NO_PORT, sk)); @@ -1439,6 +1445,12 @@ static int mptcp_getsockopt_v6(struct mptcp_sock *msk, int optname, case IPV6_V6ONLY: return mptcp_put_int_option(msk, optval, optlen, sk->sk_ipv6only); + case IPV6_TRANSPARENT: + return mptcp_put_int_option(msk, optval, optlen, + inet_test_bit(TRANSPARENT, sk)); + case IPV6_FREEBIND: + return mptcp_put_int_option(msk, optval, optlen, + inet_test_bit(FREEBIND, sk)); } return -EOPNOTSUPP;