Message ID | b451ef55b7debb519f42202e75696a79954b32b6.1623831569.git.pabeni@redhat.com (mailing list archive) |
---|---|
State | Accepted, archived |
Commit | b976d9a38cfc13603b3fb366455df375d24b5fe1 |
Delegated to: | Matthieu Baerts |
Headers | show |
Series | [v2,mptcp-net] mptcp: fix 32 bit DSN expansion | expand |
On Wed, 16 Jun 2021, Paolo Abeni wrote: > 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: https://github.com/multipath-tcp/mptcp_net-next/issues/120 > Fixes: 648ef4b88673 ("mptcp: Implement MPTCP receive path") > Signed-off-by: Paolo Abeni <pabeni@redhat.com> > --- > v1 -> v2: > - fix typo in the commit message > - use the common helper Thanks for the v2, looks good to me. Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> > --- > net/mptcp/subflow.c | 17 +---------------- > 1 file changed, 1 insertion(+), 16 deletions(-) > > diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c > index d55f4ef736a5..6772802737e4 100644 > --- a/net/mptcp/subflow.c > +++ b/net/mptcp/subflow.c > @@ -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", > @@ -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) { > -- > 2.26.3 > > > -- Mat Martineau Intel
Hi Paolo, Mat, On 16/06/2021 10:19, Paolo Abeni wrote: > 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: https://github.com/multipath-tcp/mptcp_net-next/issues/120 > Fixes: 648ef4b88673 ("mptcp: Implement MPTCP receive path") > Signed-off-by: Paolo Abeni <pabeni@redhat.com> Thank you for the patch and the review! Now in our tree (fix for net) with Mat's RvB tag: - b976d9a38cfc: mptcp: fix 32 bit DSN expansion - Results: 035a752fa93d..8db480094258 Builds and tests are now in progress: https://cirrus-ci.com/github/multipath-tcp/mptcp_net-next/export/20210617T132456 https://github.com/multipath-tcp/mptcp_net-next/actions/workflows/build-validation.yml?query=branch:export/20210617T132456 Cheers, Matt
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index d55f4ef736a5..6772802737e4 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -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", @@ -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) {
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: https://github.com/multipath-tcp/mptcp_net-next/issues/120 Fixes: 648ef4b88673 ("mptcp: Implement MPTCP receive path") Signed-off-by: Paolo Abeni <pabeni@redhat.com> --- v1 -> v2: - fix typo in the commit message - use the common helper --- net/mptcp/subflow.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-)