projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
25537d7
)
mptcp: fix locking in mptcp_disconnect()
author
Paolo Abeni
<pabeni@redhat.com>
Thu, 14 Jan 2021 15:37:37 +0000
(16:37 +0100)
committer
Jakub Kicinski
<kuba@kernel.org>
Thu, 14 Jan 2021 19:25:21 +0000
(11:25 -0800)
tcp_disconnect() expects the caller acquires the sock lock,
but mptcp_disconnect() is not doing that. Add the missing
required lock.
Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
Fixes: 76e2a55d1625 ("mptcp: better msk-level shutdown.")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Link:
https://lore.kernel.org/r/f818e82b58a556feeb71dcccc8bf1c87aafc6175.1610638176.git.pabeni@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/protocol.c
patch
|
blob
|
history
diff --git
a/net/mptcp/protocol.c
b/net/mptcp/protocol.c
index 81faeff8f3bb7e00991af5ee30179252de103de1..f998a077c7dd04a319c1de11cb37a07fdbb3eb88 100644
(file)
--- a/
net/mptcp/protocol.c
+++ b/
net/mptcp/protocol.c
@@
-2646,8
+2646,13
@@
static int mptcp_disconnect(struct sock *sk, int flags)
struct mptcp_sock *msk = mptcp_sk(sk);
__mptcp_flush_join_list(msk);
- mptcp_for_each_subflow(msk, subflow)
- tcp_disconnect(mptcp_subflow_tcp_sock(subflow), flags);
+ mptcp_for_each_subflow(msk, subflow) {
+ struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+
+ lock_sock(ssk);
+ tcp_disconnect(ssk, flags);
+ release_sock(ssk);
+ }
return 0;
}