From: Paolo Abeni <pabeni@redhat.com>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <geliangtang@gmail.com>
Subject: [PATCH v5 mptcp-next 14/21] mptcp: validate the data checksum
Date: Tue, 4 May 2021 23:29:24 +0200 [thread overview]
Message-ID: <391130d1c4f28e5a4ef8f45ebfc1fec91f65bceb.1620162984.git.pabeni@redhat.com> (raw)
In-Reply-To: <cover.1620162984.git.pabeni@redhat.com>
From: Geliang Tang <geliangtang@gmail.com>
This patch added three new members named data_csum, csum_len and map_csum
in struct mptcp_subflow_context, implemented a new function named
mptcp_validate_data_checksum(). Validate the data checksum in the function
__mptcp_move_skbs_from_subflow.
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
net/mptcp/protocol.c | 35 +++++++++++++++++++++++++++++++++++
net/mptcp/protocol.h | 3 +++
net/mptcp/subflow.c | 7 +++++--
3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 4c79b0518e81..ba488a36dca0 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -528,6 +528,35 @@ static bool mptcp_check_data_fin(struct sock *sk)
return ret;
}
+static bool mptcp_validate_data_checksum(struct sock *ssk)
+{
+ struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
+ struct mptcp_sock *msk = mptcp_sk(subflow->conn);
+ struct csum_pseudo_header header;
+ __wsum csum;
+
+ if (__mptcp_check_fallback(msk))
+ goto out;
+
+ if (subflow->csum_len < subflow->map_data_len)
+ goto out;
+
+ header.data_seq = subflow->map_seq;
+ header.subflow_seq = subflow->map_subflow_seq;
+ header.data_len = subflow->map_data_len;
+ header.csum = subflow->map_csum;
+
+ csum = csum_partial(&header, sizeof(header), subflow->data_csum);
+
+ if (csum_fold(csum))
+ return false;
+ subflow->data_csum = 0;
+ subflow->csum_len = 0;
+
+out:
+ return true;
+}
+
static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
struct sock *ssk,
unsigned int *bytes)
@@ -596,6 +625,12 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
if (tp->urg_data)
done = true;
+ if (READ_ONCE(msk->csum_enabled)) {
+ subflow->data_csum = skb_checksum(skb, offset, len,
+ subflow->data_csum);
+ subflow->csum_len += len;
+ mptcp_validate_data_checksum(ssk);
+ }
if (__mptcp_move_skb(msk, ssk, skb, offset, len))
moved += len;
seq += len;
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index c7cc9382bf77..f1d9657eb6ce 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -399,6 +399,9 @@ struct mptcp_subflow_context {
u32 map_subflow_seq;
u32 ssn_offset;
u32 map_data_len;
+ __wsum data_csum;
+ u32 csum_len;
+ __sum16 map_csum;
u32 request_mptcp : 1, /* send MP_CAPABLE */
request_join : 1, /* send MP_JOIN */
request_bkup : 1,
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index f8732e11a392..8648d25190e1 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -948,9 +948,12 @@ static enum mapping_status get_mapping_status(struct sock *ssk,
subflow->map_data_len = data_len;
subflow->map_valid = 1;
subflow->mpc_map = mpext->mpc_map;
- pr_debug("new map seq=%llu subflow_seq=%u data_len=%u",
+ subflow->data_csum = 0;
+ subflow->csum_len = 0;
+ subflow->map_csum = mpext->csum;
+ pr_debug("new map seq=%llu subflow_seq=%u data_len=%u csum=%u",
subflow->map_seq, subflow->map_subflow_seq,
- subflow->map_data_len);
+ subflow->map_data_len, subflow->map_csum);
validate_seq:
/* we revalidate valid mapping on new skb, because we must ensure
--
2.26.2
next prev parent reply other threads:[~2021-05-04 21:30 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-04 21:29 [PATCH v5 mptcp-next 00/21] mptcp: data checksum support Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 01/21] mptcp: generate the data checksum Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 02/21] Squash-to: "mptcp: generate the data checksum" Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 03/21] mptcp: add csum_reqd in mptcp_out_options Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 04/21] mptcp: send out checksum for MP_CAPABLE with data Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 05/21] Squash-to: "mptcp: send out checksum for MP_CAPABLE with data" Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 06/21] mptcp: send out checksum for DSS Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 07/21] Squash-to "mptcp: send out checksum for DSS" Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 08/21] mptcp: add sk parameter for mptcp_parse_option Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 09/21] mptcp: add csum_reqd in mptcp_options_received Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 10/21] mptcp: receive checksum for MP_CAPABLE with data Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 11/21] Squash-to: "mptcp: receive checksum for MP_CAPABLE with data" Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 12/21] mptcp: receive checksum for DSS Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 13/21] Squash-to: "mptcp: receive checksum for DSS" Paolo Abeni
2021-05-04 21:29 ` Paolo Abeni [this message]
2021-05-04 21:29 ` [PATCH v5 mptcp-next 15/21] Squash-to: mptcp: validate the data checksum Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 16/21] mptcp: cleanup error path in subflow_check_data_avail() Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 17/21] mptcp: tune re-injections for csum enabled mode Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 18/21] mptcp: add the mib for data checksum Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 19/21] mptcp: add a new sysctl checksum_enabled Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 20/21] selftests: mptcp: enable checksum in mptcp_connect.sh Paolo Abeni
2021-05-04 21:29 ` [PATCH v5 mptcp-next 21/21] selftests: mptcp: enable checksum in mptcp_join.sh Paolo Abeni
2021-05-04 21:41 ` [PATCH v5 mptcp-next 00/21] mptcp: data checksum support Paolo Abeni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=391130d1c4f28e5a4ef8f45ebfc1fec91f65bceb.1620162984.git.pabeni@redhat.com \
--to=pabeni@redhat.com \
--cc=geliangtang@gmail.com \
--cc=mptcp@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).