]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mptcp: Align mptcp_inet6_sk with other protocols
authorPedro Falcato <pfalcato@suse.de>
Wed, 30 Apr 2025 15:45:41 +0000 (16:45 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 3 May 2025 01:28:21 +0000 (18:28 -0700)
Ever since commit f5f80e32de12 ("ipv6: remove hard coded limitation on
ipv6_pinfo") that protocols stopped using the old "obj_size -
sizeof(struct ipv6_pinfo)" way of grabbing ipv6_pinfo, that severely
restricted struct layout and caused fun, hard to see issues.

However, mptcp_inet6_sk wasn't fixed (unlike tcp_inet6_sk). Do so.
The non-cloned sockets already do the right thing using
ipv6_pinfo_offset + the generic IPv6 code.

Signed-off-by: Pedro Falcato <pfalcato@suse.de>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250430154541.1038561-1-pfalcato@suse.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/protocol.c

index 26ffa06c21e8d3429e2684f58523226d82a094ea..c4fd558307f2091d4327e078cdcee9a6b81cf2df 100644 (file)
@@ -3142,9 +3142,9 @@ static int mptcp_disconnect(struct sock *sk, int flags)
 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
 static struct ipv6_pinfo *mptcp_inet6_sk(const struct sock *sk)
 {
-       unsigned int offset = sizeof(struct mptcp6_sock) - sizeof(struct ipv6_pinfo);
+       struct mptcp6_sock *msk6 = container_of(mptcp_sk(sk), struct mptcp6_sock, msk);
 
-       return (struct ipv6_pinfo *)(((u8 *)sk) + offset);
+       return &msk6->np;
 }
 
 static void mptcp_copy_ip6_options(struct sock *newsk, const struct sock *sk)