Skip to content

Commit

Permalink
mptcp: fix 32 bit DSN expansion
Browse files Browse the repository at this point in the history
The current implementation of 32 bit DSN expansion is buggy.
After the previous patch, we can simply reuse the newly
introduced helper to do the expansion safely.

Closes: multipath-tcp/mptcp_net-next#120
Fixes: 648ef4b ("mptcp: Implement MPTCP receive path")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
  • Loading branch information
Paolo Abeni authored and intel-lab-lkp committed Jun 16, 2021
1 parent 781194c commit 360ec48
Showing 1 changed file with 1 addition and 16 deletions.
17 changes: 1 addition & 16 deletions net/mptcp/subflow.c
Original file line number Diff line number Diff line change
Expand Up @@ -781,15 +781,6 @@ enum mapping_status {
MAPPING_DUMMY
};

static u64 expand_seq(u64 old_seq, u16 old_data_len, u64 seq)
{
if ((u32)seq == (u32)old_seq)
return old_seq;

/* Assume map covers data not mapped yet. */
return seq | ((old_seq + old_data_len + 1) & GENMASK_ULL(63, 32));
}

static void dbg_bad_map(struct mptcp_subflow_context *subflow, u32 ssn)
{
pr_debug("Bad mapping: ssn=%d map_seq=%d map_data_len=%d",
Expand Down Expand Up @@ -995,13 +986,7 @@ static enum mapping_status get_mapping_status(struct sock *ssk,
data_len--;
}

if (!mpext->dsn64) {
map_seq = expand_seq(subflow->map_seq, subflow->map_data_len,
mpext->data_seq);
pr_debug("expanded seq=%llu", subflow->map_seq);
} else {
map_seq = mpext->data_seq;
}
map_seq = mptcp_expand_seq(READ_ONCE(msk->ack_seq), mpext->data_seq, mpext->dsn64);
WRITE_ONCE(mptcp_sk(subflow->conn)->use_64bit_ack, !!mpext->dsn64);

if (subflow->map_valid) {
Expand Down

0 comments on commit 360ec48

Please sign in to comment.