summaryrefslogtreecommitdiff
path: root/net/mptcp/token.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2021-10-29 22:00:00 +0100
committerMark Brown <broonie@kernel.org>2021-10-29 22:00:00 +0100
commit318a54c0ee4aaa3bfd69fdf505588510c7672c0c (patch)
treefcd342658639851179ab88c0eb317e83b586eb71 /net/mptcp/token.c
parent8e14329645bc7d722e1ec913025b54199fafaee3 (diff)
parent6195eb15f6d60dd92d1644dc11f1c1c2e84ebfeb (diff)
Merge remote-tracking branch 'asoc/for-5.16' into asoc-next
Diffstat (limited to 'net/mptcp/token.c')
-rw-r--r--net/mptcp/token.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/net/mptcp/token.c b/net/mptcp/token.c
index a98e554b034f..e581b341c5be 100644
--- a/net/mptcp/token.c
+++ b/net/mptcp/token.c
@@ -231,6 +231,7 @@ found:
/**
* mptcp_token_get_sock - retrieve mptcp connection sock using its token
+ * @net: restrict to this namespace
* @token: token of the mptcp connection to retrieve
*
* This function returns the mptcp connection structure with the given token.
@@ -238,7 +239,7 @@ found:
*
* returns NULL if no connection with the given token value exists.
*/
-struct mptcp_sock *mptcp_token_get_sock(u32 token)
+struct mptcp_sock *mptcp_token_get_sock(struct net *net, u32 token)
{
struct hlist_nulls_node *pos;
struct token_bucket *bucket;
@@ -251,11 +252,15 @@ struct mptcp_sock *mptcp_token_get_sock(u32 token)
again:
sk_nulls_for_each_rcu(sk, pos, &bucket->msk_chain) {
msk = mptcp_sk(sk);
- if (READ_ONCE(msk->token) != token)
+ if (READ_ONCE(msk->token) != token ||
+ !net_eq(sock_net(sk), net))
continue;
+
if (!refcount_inc_not_zero(&sk->sk_refcnt))
goto not_found;
- if (READ_ONCE(msk->token) != token) {
+
+ if (READ_ONCE(msk->token) != token ||
+ !net_eq(sock_net(sk), net)) {
sock_put(sk);
goto again;
}