From 697daeedf734747b6ea7584d1fde81078035eb64 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 11 Jul 2023 19:50:36 +0200 Subject: [PATCH] modules: enforce equal library and compiler versions For all the modules that include the private header we require that the library and compiler versions match. Otherwise we might end up poking into new or old fields that got moved or changed in the private struct and crash. See #3243 --- pipewire-jack/src/pipewire-jack.c | 3 +++ src/modules/module-client-node.c | 3 +++ src/modules/module-profiler.c | 3 +++ src/modules/module-protocol-native.c | 3 +++ 4 files changed, 12 insertions(+) diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index 5834d810e..bf79f575f 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -3543,6 +3543,9 @@ jack_client_t * jack_client_open (const char *client_name, strstr(pw_get_library_version(), "0.2") != NULL) goto disabled; + if (!spa_streq(pw_get_library_version(), pw_get_headers_version())) + goto disabled; + return_val_if_fail(client_name != NULL, NULL); client = calloc(1, sizeof(struct client)); diff --git a/src/modules/module-client-node.c b/src/modules/module-client-node.c index b3673bf69..f00a527c6 100644 --- a/src/modules/module-client-node.c +++ b/src/modules/module-client-node.c @@ -163,6 +163,9 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) PW_LOG_TOPIC_INIT(mod_topic); + if (!spa_streq(pw_get_library_version(), pw_get_headers_version())) + return -ESTALE; + factory = pw_context_create_factory(context, "client-node", PW_TYPE_INTERFACE_ClientNode, diff --git a/src/modules/module-profiler.c b/src/modules/module-profiler.c index 97a1c37c0..d4536376e 100644 --- a/src/modules/module-profiler.c +++ b/src/modules/module-profiler.c @@ -387,6 +387,9 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) NULL }; + if (!spa_streq(pw_get_library_version(), pw_get_headers_version())) + return -ESTALE; + PW_LOG_TOPIC_INIT(mod_topic); impl = calloc(1, sizeof(struct impl)); diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c index 371fc28d9..890a81dbc 100644 --- a/src/modules/module-protocol-native.c +++ b/src/modules/module-protocol-native.c @@ -1472,6 +1472,9 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) const struct pw_properties *props; int res; + if (!spa_streq(pw_get_library_version(), pw_get_headers_version())) + return -ESTALE; + PW_LOG_TOPIC_INIT(mod_topic); PW_LOG_TOPIC_INIT(mod_topic_connection);