mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
mptcp: free resources when the port number is mismatched
When the port number is mismatched with the announced ones, use
'goto dispose_child' to free the resources instead of using 'goto out'.
This patch also moves the port number checking code in
subflow_syn_recv_sock before mptcp_finish_join, otherwise subflow_drop_ctx
will fail in dispose_child.
Fixes: 5bc56388c7
("mptcp: add port number check for MP_JOIN")
Reported-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
417789df4a
commit
9238e900d6
@@ -687,11 +687,6 @@ create_child:
|
|||||||
/* move the msk reference ownership to the subflow */
|
/* move the msk reference ownership to the subflow */
|
||||||
subflow_req->msk = NULL;
|
subflow_req->msk = NULL;
|
||||||
ctx->conn = (struct sock *)owner;
|
ctx->conn = (struct sock *)owner;
|
||||||
if (!mptcp_finish_join(child))
|
|
||||||
goto dispose_child;
|
|
||||||
|
|
||||||
SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINACKRX);
|
|
||||||
tcp_rsk(req)->drop_req = true;
|
|
||||||
|
|
||||||
if (subflow_use_different_sport(owner, sk)) {
|
if (subflow_use_different_sport(owner, sk)) {
|
||||||
pr_debug("ack inet_sport=%d %d",
|
pr_debug("ack inet_sport=%d %d",
|
||||||
@@ -699,10 +694,16 @@ create_child:
|
|||||||
ntohs(inet_sk((struct sock *)owner)->inet_sport));
|
ntohs(inet_sk((struct sock *)owner)->inet_sport));
|
||||||
if (!mptcp_pm_sport_in_anno_list(owner, sk)) {
|
if (!mptcp_pm_sport_in_anno_list(owner, sk)) {
|
||||||
SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX);
|
SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX);
|
||||||
goto out;
|
goto dispose_child;
|
||||||
}
|
}
|
||||||
SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINPORTACKRX);
|
SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINPORTACKRX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mptcp_finish_join(child))
|
||||||
|
goto dispose_child;
|
||||||
|
|
||||||
|
SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINACKRX);
|
||||||
|
tcp_rsk(req)->drop_req = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user