summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGang Yan <yangang@kylinos.cn>2026-04-03 14:29:27 +0300
committerJakub Kicinski <kuba@kernel.org>2026-04-07 05:14:26 +0300
commit00d46be3c319029bdf5b4eb53bff8e47a8e7ddc4 (patch)
treed293a69973dda1448411327e6e94f6cf7bc73493
parentede3136e56557498ec3f2e6da58cb0920d8074e1 (diff)
downloadlinux-00d46be3c319029bdf5b4eb53bff8e47a8e7ddc4.tar.xz
mptcp: reduce 'overhead' from u16 to u8
The 'overhead' in struct mptcp_data_frag can safely use u8, as it represents 'alignment + sizeof(mptcp_data_frag)'. With a maximum alignment of 7('ALIGN(1, sizeof(long)) - 1'), the overhead is at most 47, well below U8_MAX and validated with BUILD_BUG_ON(). This patch also adds a field named 'unused' for further extensions. Signed-off-by: Gang Yan <yangang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20260403-net-next-mptcp-msg_eor-misc-v1-1-b0b33bea3fed@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--net/mptcp/protocol.c6
-rw-r--r--net/mptcp/protocol.h3
2 files changed, 8 insertions, 1 deletions
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 239fb9e75c7c..79315e575d07 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -4616,6 +4616,12 @@ void __init mptcp_proto_init(void)
inet_register_protosw(&mptcp_protosw);
BUILD_BUG_ON(sizeof(struct mptcp_skb_cb) > sizeof_field(struct sk_buff, cb));
+
+ /* struct mptcp_data_frag: 'overhead' corresponds to the alignment
+ * (ALIGN(1, sizeof(long)) - 1, so 8-1) + the struct's size
+ */
+ BUILD_BUG_ON(ALIGN(1, sizeof(long)) - 1 + sizeof(struct mptcp_data_frag)
+ > U8_MAX);
}
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 0bd1ee860316..02031007100b 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -263,7 +263,8 @@ struct mptcp_data_frag {
u64 data_seq;
u16 data_len;
u16 offset;
- u16 overhead;
+ u8 overhead;
+ u8 __unused;
u16 already_sent;
struct page *page;
};