File 0002-module-protocol-native-Fix-socket-activation.patch of Package pipewire

From f4e174870eb8cbe60c922d3bf181f3eb2347523c Mon Sep 17 00:00:00 2001
From: Jonas Holmberg <jonashg@axis.com>
Date: Mon, 2 Mar 2026 10:28:26 +0100
Subject: [PATCH] module-protocol-native: Fix socket activation

Fix path comparison in is_socket_unix() and don't unset LISTEN_FDS since
the function that uses it is called more than once and it was not unset
when sd_listen_fds() was used.

Fixes #5140
---
 src/modules/module-protocol-native.c       |  2 +-
 src/modules/module-protocol-pulse/server.c |  2 +-
 src/modules/network-utils.h                | 14 +++++---------
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c
index 2be92a847..98a43829b 100644
--- a/src/modules/module-protocol-native.c
+++ b/src/modules/module-protocol-native.c
@@ -907,7 +907,7 @@ static int add_socket(struct pw_protocol *protocol, struct server *s, struct soc
 	bool activated = false;
 
 	{
-		int i, n = listen_fd();
+		int i, n = listen_fds();
 		for (i = 0; i < n; ++i) {
 			if (is_socket_unix(LISTEN_FDS_START + i, SOCK_STREAM,
 						s->addr.sun_path) > 0) {
diff --git a/src/modules/module-protocol-pulse/server.c b/src/modules/module-protocol-pulse/server.c
index aeab710b0..637757dfd 100644
--- a/src/modules/module-protocol-pulse/server.c
+++ b/src/modules/module-protocol-pulse/server.c
@@ -576,7 +576,7 @@ static bool is_stale_socket(int fd, const struct sockaddr_un *addr_un)
 
 static int check_socket_activation(const char *path)
 {
-	const int n = listen_fd();
+	const int n = listen_fds();
 
 	for (int i = 0; i < n; i++) {
 		const int fd = LISTEN_FDS_START + i;
diff --git a/src/modules/network-utils.h b/src/modules/network-utils.h
index a89b7d3bd..6ff80dd7a 100644
--- a/src/modules/network-utils.h
+++ b/src/modules/network-utils.h
@@ -143,7 +143,7 @@ static inline bool pw_net_addr_is_any(struct sockaddr_storage *addr)
 
 /* Returns the number of file descriptors passed for socket activation.
  * Returns 0 if none, -1 on error. */
-static inline int listen_fd(void)
+static inline int listen_fds(void)
 {
 	uint32_t n;
 	int i, flags;
@@ -161,8 +161,6 @@ static inline int listen_fd(void)
 			return -1;
 	}
 
-	unsetenv("LISTEN_FDS");
-
 	return (int)n;
 }
 
@@ -192,12 +190,10 @@ static inline int is_socket_unix(int fd, int type, const char *path)
 		if (addr.sun_family != AF_UNIX)
 			return 0;
 		size_t length = strlen(path);
-		if (length > 0) {
-			if (len < offsetof(struct sockaddr_un, sun_path) + length)
-				return 0;
-			if (memcmp(addr.sun_path, path, length) != 0)
-				return 0;
-		}
+		if (len < offsetof(struct sockaddr_un, sun_path) + length + 1)
+			return 0;
+		if (memcmp(addr.sun_path, path, length + 1) != 0)
+			return 0;
 	}
 
 	return 1;
-- 
GitLab

openSUSE Build Service is sponsored by