Commit 63ec72bd authored by Kees Cook's avatar Kees Cook Committed by Jakub Kicinski

mptcp: Use struct_group() to avoid cross-field memset()

In preparation for FORTIFY_SOURCE performing compile-time and run-time
field bounds checking for memcpy(), memmove(), and memset(), avoid
intentionally writing across neighboring fields.

Use struct_group() to capture the fields to be reset, so that memset()
can be appropriately bounds-checked by the compiler.

Cc: Matthieu Baerts <matthieu.baerts@tessares.net>
Cc: mptcp@lists.linux.dev
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Reviewed-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Link: https://lore.kernel.org/r/20220121073935.1154263-1-keescook@chromium.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2c13c05c
...@@ -408,7 +408,7 @@ DECLARE_PER_CPU(struct mptcp_delegated_action, mptcp_delegated_actions); ...@@ -408,7 +408,7 @@ DECLARE_PER_CPU(struct mptcp_delegated_action, mptcp_delegated_actions);
struct mptcp_subflow_context { struct mptcp_subflow_context {
struct list_head node;/* conn_list of subflows */ struct list_head node;/* conn_list of subflows */
char reset_start[0]; struct_group(reset,
unsigned long avg_pacing_rate; /* protected by msk socket lock */ unsigned long avg_pacing_rate; /* protected by msk socket lock */
u64 local_key; u64 local_key;
...@@ -458,7 +458,7 @@ struct mptcp_subflow_context { ...@@ -458,7 +458,7 @@ struct mptcp_subflow_context {
long delegated_status; long delegated_status;
char reset_end[0]; );
struct list_head delegated_node; /* link into delegated_action, protected by local BH */ struct list_head delegated_node; /* link into delegated_action, protected by local BH */
...@@ -494,7 +494,7 @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) ...@@ -494,7 +494,7 @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
static inline void static inline void
mptcp_subflow_ctx_reset(struct mptcp_subflow_context *subflow) mptcp_subflow_ctx_reset(struct mptcp_subflow_context *subflow)
{ {
memset(subflow->reset_start, 0, subflow->reset_end - subflow->reset_start); memset(&subflow->reset, 0, sizeof(subflow->reset));
subflow->request_mptcp = 1; subflow->request_mptcp = 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment