Commit e2f4ac7b authored by Matthieu Baerts (NGI0)'s avatar Matthieu Baerts (NGI0) Committed by Paolo Abeni
Browse files

mptcp: sockopt: fix getting freebind & transparent



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: c9406a23 ("mptcp: sockopt: add SOL_IP freebind & transparent options")
Cc: stable@vger.kernel.org
Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250314-net-mptcp-fix-data-stream-corr-sockopt-v1-3-122dbb249db3@kernel.org


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 8c396337
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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;