mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
mptcp: clear 'kern' flag from fallback sockets
[ Upstream commitd6692b3b97] The mptcp ULP extension relies on sk->sk_sock_kern being set correctly: It prevents setsockopt(fd, IPPROTO_TCP, TCP_ULP, "mptcp", 6); from working for plain tcp sockets (any userspace-exposed socket). But in case of fallback, accept() can return a plain tcp sk. In such case, sk is still tagged as 'kernel' and setsockopt will work. This will crash the kernel, The subflow extension has a NULL ctx->conn mptcp socket: BUG: KASAN: null-ptr-deref in subflow_data_ready+0x181/0x2b0 Call Trace: tcp_data_ready+0xf8/0x370 [..] Fixes:cf7da0d66c("mptcp: Create SUBFLOW socket for incoming connections") Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
222cebd995
commit
451f1eded7
@@ -2149,7 +2149,7 @@ static struct sock *mptcp_accept(struct sock *sk, int flags, int *err,
|
|||||||
*/
|
*/
|
||||||
if (WARN_ON_ONCE(!new_mptcp_sock)) {
|
if (WARN_ON_ONCE(!new_mptcp_sock)) {
|
||||||
tcp_sk(newsk)->is_mptcp = 0;
|
tcp_sk(newsk)->is_mptcp = 0;
|
||||||
return newsk;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* acquire the 2nd reference for the owning socket */
|
/* acquire the 2nd reference for the owning socket */
|
||||||
@@ -2174,6 +2174,8 @@ static struct sock *mptcp_accept(struct sock *sk, int flags, int *err,
|
|||||||
MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK);
|
MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
newsk->sk_kern_sock = kern;
|
||||||
return newsk;
|
return newsk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user