From: Kees Cook <kees@kernel.org>
To: Paolo Abeni <pabeni@redhat.com>
Cc: Kees Cook <kees@kernel.org>, Jakub Kicinski <kuba@kernel.org>,
"Gustavo A. R. Silva" <gustavo@embeddedor.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Simon Horman <horms@kernel.org>,
Kuniyuki Iwashima <kuniyu@google.com>,
Willem de Bruijn <willemb@google.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org, linux-hardening@vger.kernel.org
Subject: [PATCH net-next v5 1/8] net: Add struct sockaddr_unsized for sockaddr of unknown length
Date: Mon, 3 Nov 2025 16:26:09 -0800 [thread overview]
Message-ID: <20251104002617.2752303-1-kees@kernel.org> (raw)
In-Reply-To: <20251104002608.do.383-kees@kernel.org>
Add flexible sockaddr structure to support addresses longer than the
traditional 14-byte struct sockaddr::sa_data limitation without
requiring the full 128-byte sa_data of struct sockaddr_storage. This
allows the network APIs to pass around a pointer to an object that
isn't lying to the compiler about how big it is, but must be accompanied
by its actual size as an additional parameter.
It's possible we may way to migrate to including the size with the
struct in the future, e.g.:
struct sockaddr_unsized {
u16 sa_data_len;
u16 sa_family;
u8 sa_data[] __counted_by(sa_data_len);
};
Signed-off-by: Kees Cook <kees@kernel.org>
---
include/linux/socket.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/include/linux/socket.h b/include/linux/socket.h
index 3b262487ec06..7b1a01be29da 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -40,6 +40,23 @@ struct sockaddr {
};
};
+/**
+ * struct sockaddr_unsized - Unspecified size sockaddr for callbacks
+ * @sa_family: Address family (AF_UNIX, AF_INET, AF_INET6, etc.)
+ * @sa_data: Flexible array for address data
+ *
+ * This structure is designed for callback interfaces where the
+ * total size is known via the sockaddr_len parameter. Unlike struct
+ * sockaddr which has a fixed 14-byte sa_data limit or struct
+ * sockaddr_storage which has a fixed 128-byte sa_data limit, this
+ * structure can accommodate addresses of any size, but must be used
+ * carefully.
+ */
+struct sockaddr_unsized {
+ __kernel_sa_family_t sa_family; /* address family, AF_xxx */
+ char sa_data[]; /* flexible address data */
+};
+
struct linger {
int l_onoff; /* Linger active */
int l_linger; /* How long to linger for */
--
2.34.1
next prev parent reply other threads:[~2025-11-04 0:26 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-04 0:26 [PATCH net-next v5 0/8] net: Introduce struct sockaddr_unsized Kees Cook
2025-11-04 0:26 ` Kees Cook [this message]
2025-11-04 9:15 ` [PATCH net-next v5 1/8] net: Add struct sockaddr_unsized for sockaddr of unknown length David Laight
2025-11-04 16:59 ` Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 2/8] net: Convert proto_ops bind() callbacks to use sockaddr_unsized Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 3/8] net: Convert proto_ops connect() " Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 4/8] net: Remove struct sockaddr from net.h Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 5/8] net: Convert proto callbacks from sockaddr to sockaddr_unsized Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 6/8] bpf: Convert cgroup sockaddr filters to use sockaddr_unsized consistently Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 7/8] bpf: Convert bpf_sock_addr_kern "uaddr" to sockaddr_unsized Kees Cook
2025-11-04 0:26 ` [PATCH net-next v5 8/8] net: Convert struct sockaddr to fixed-size "sa_data[14]" Kees Cook
2025-11-05 3:40 ` [PATCH net-next v5 0/8] net: Introduce struct sockaddr_unsized patchwork-bot+netdevbpf
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=20251104002617.2752303-1-kees@kernel.org \
--to=kees@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gustavo@embeddedor.com \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=willemb@google.com \
/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).