mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
mptcp: distinguish rcv vs sent backup flag in requests
commitefd340bf3d
upstream. When sending an MP_JOIN + SYN + ACK, it is possible to mark the subflow as 'backup' by setting the flag with the same name. Before this patch, the backup was set if the other peer set it in its MP_JOIN + SYN request. It is not correct: the backup flag should be set in the MPJ+SYN+ACK only if the host asks for it, and not mirroring what was done by the other peer. It is then required to have a dedicated bit for each direction, similar to what is done in the subflow context. Fixes:f296234c98
("mptcp: Add handling of incoming MP_JOIN requests") Cc: stable@vger.kernel.org Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
991b26e110
commit
09176f8099
@ -904,7 +904,7 @@ bool mptcp_synack_options(const struct request_sock *req, unsigned int *size,
|
|||||||
return true;
|
return true;
|
||||||
} else if (subflow_req->mp_join) {
|
} else if (subflow_req->mp_join) {
|
||||||
opts->suboptions = OPTION_MPTCP_MPJ_SYNACK;
|
opts->suboptions = OPTION_MPTCP_MPJ_SYNACK;
|
||||||
opts->backup = subflow_req->backup;
|
opts->backup = subflow_req->request_bkup;
|
||||||
opts->join_id = subflow_req->local_id;
|
opts->join_id = subflow_req->local_id;
|
||||||
opts->thmac = subflow_req->thmac;
|
opts->thmac = subflow_req->thmac;
|
||||||
opts->nonce = subflow_req->local_nonce;
|
opts->nonce = subflow_req->local_nonce;
|
||||||
|
@ -400,6 +400,7 @@ struct mptcp_subflow_request_sock {
|
|||||||
u16 mp_capable : 1,
|
u16 mp_capable : 1,
|
||||||
mp_join : 1,
|
mp_join : 1,
|
||||||
backup : 1,
|
backup : 1,
|
||||||
|
request_bkup : 1,
|
||||||
csum_reqd : 1,
|
csum_reqd : 1,
|
||||||
allow_join_id0 : 1;
|
allow_join_id0 : 1;
|
||||||
u8 local_id;
|
u8 local_id;
|
||||||
|
@ -1876,6 +1876,7 @@ static void subflow_ulp_clone(const struct request_sock *req,
|
|||||||
new_ctx->mp_join = 1;
|
new_ctx->mp_join = 1;
|
||||||
new_ctx->fully_established = 1;
|
new_ctx->fully_established = 1;
|
||||||
new_ctx->backup = subflow_req->backup;
|
new_ctx->backup = subflow_req->backup;
|
||||||
|
new_ctx->request_bkup = subflow_req->request_bkup;
|
||||||
WRITE_ONCE(new_ctx->remote_id, subflow_req->remote_id);
|
WRITE_ONCE(new_ctx->remote_id, subflow_req->remote_id);
|
||||||
new_ctx->token = subflow_req->token;
|
new_ctx->token = subflow_req->token;
|
||||||
new_ctx->thmac = subflow_req->thmac;
|
new_ctx->thmac = subflow_req->thmac;
|
||||||
|
Loading…
Reference in New Issue
Block a user