File drbd-convert-bind-and-connect-callbacks-to-use-socka.patch of Package drbd
From dea3733b172aae3de3826147b6d72c35f1222f42 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?=
<christoph.boehmwalder@linbit.com>
Date: Mon, 15 Dec 2025 18:43:53 +0100
Subject: [PATCH] drbd: convert bind and connect callbacks to use
sockaddr_unsized
Same idea as upstream commits:
0e50474f net: Convert proto_ops bind() callbacks to use sockaddr_unsized
85cb0757 net: Convert proto_ops connect() callbacks to use sockaddr_unsized
Also include a compat patch for older kernels.
---
.../cocci/struct_sockaddr_unsized__no_present.cocci | 4 ++++
drbd/drbd-kernel-compat/gen_patch_names.c | 3 +++
.../tests/have_struct_sockaddr_unsized.c | 5 +++++
drbd/drbd_transport_tcp.c | 7 ++++---
4 files changed, 16 insertions(+), 3 deletions(-)
create mode 100644 drbd/drbd-kernel-compat/cocci/struct_sockaddr_unsized__no_present.cocci
create mode 100644 drbd/drbd-kernel-compat/tests/have_struct_sockaddr_unsized.c
diff --git a/drbd/drbd-kernel-compat/cocci/struct_sockaddr_unsized__no_present.cocci b/drbd/drbd-kernel-compat/cocci/struct_sockaddr_unsized__no_present.cocci
new file mode 100644
index 000000000000..6d6259bcf546
--- /dev/null
+++ b/drbd/drbd-kernel-compat/cocci/struct_sockaddr_unsized__no_present.cocci
@@ -0,0 +1,4 @@
+@@
+@@
+- struct sockaddr_unsized
++ struct sockaddr
diff --git a/drbd/drbd-kernel-compat/gen_patch_names.c b/drbd/drbd-kernel-compat/gen_patch_names.c
index a1835b3545a8..8371f117f3b0 100644
--- a/drbd/drbd-kernel-compat/gen_patch_names.c
+++ b/drbd/drbd-kernel-compat/gen_patch_names.c
@@ -497,6 +497,9 @@ int main(int argc, char **argv)
patch(1, "debugfs_change_name", true, false,
COMPAT_HAVE_DEBUGFS_CHANGE_NAME, "present");
+ patch(1, "struct_sockaddr_unsized", true, false,
+ COMPAT_HAVE_STRUCT_SOCKADDR_UNSIZED, "present");
+
/* #define BLKDEV_ISSUE_ZEROOUT_EXPORTED */
/* #define BLKDEV_ZERO_NOUNMAP */
diff --git a/drbd/drbd-kernel-compat/tests/have_struct_sockaddr_unsized.c b/drbd/drbd-kernel-compat/tests/have_struct_sockaddr_unsized.c
new file mode 100644
index 000000000000..2957ef006330
--- /dev/null
+++ b/drbd/drbd-kernel-compat/tests/have_struct_sockaddr_unsized.c
@@ -0,0 +1,5 @@
+/* { "version": "v6.18-rc4", "commit": "bf33247a90d3e85d53a9b55bb276b725456ff0bf", "comment": "struct sockaddr_unsized was introduced", "author": "Kees Cook <kees@kernel.org>", "date": "Mon Nov 3 16:26:09 2025 -0800" } */
+
+#include <linux/socket.h>
+
+struct sockaddr_unsized x;
diff --git a/drbd/drbd_transport_tcp.c b/drbd/drbd_transport_tcp.c
index 7ffc20997cc4..9dfcaf9a2230 100644
--- a/drbd/drbd_transport_tcp.c
+++ b/drbd/drbd_transport_tcp.c
@@ -495,14 +495,15 @@ static int dtt_try_connect(struct dtt_path *path, struct socket **ret_socket)
* a free one dynamically.
*/
what = "bind before connect";
- err = socket->ops->bind(socket, (struct sockaddr *) &my_addr, path->path.my_addr_len);
+ err = socket->ops->bind(socket, (struct sockaddr_unsized *) &my_addr,
+ path->path.my_addr_len);
if (err < 0)
goto out;
/* connect may fail, peer not yet available.
* stay C_CONNECTING, don't go Disconnecting! */
what = "connect";
- err = socket->ops->connect(socket, (struct sockaddr *) &peer_addr,
+ err = socket->ops->connect(socket, (struct sockaddr_unsized *) &peer_addr,
path->path.peer_addr_len, 0);
if (err < 0) {
switch (err) {
@@ -1030,7 +1031,7 @@ static int dtt_init_listener(struct drbd_transport *transport,
addr_len = addr->sa_family == AF_INET6 ? sizeof(struct sockaddr_in6)
: sizeof(struct sockaddr_in);
- err = s_listen->ops->bind(s_listen, (struct sockaddr *)&my_addr, addr_len);
+ err = s_listen->ops->bind(s_listen, (struct sockaddr_unsized *)&my_addr, addr_len);
if (err < 0) {
what = "bind before listen";
goto out;
--
2.43.0