Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wireplumber for openSUSE:Factory 
checked in at 2023-11-01 22:09:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wireplumber (Old)
 and      /work/SRC/openSUSE:Factory/.wireplumber.new.17445 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wireplumber"

Wed Nov  1 22:09:35 2023 rev:25 rq:1121413 version:0.4.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/wireplumber/wireplumber.changes  2023-10-13 
23:14:10.917950880 +0200
+++ /work/SRC/openSUSE:Factory/.wireplumber.new.17445/wireplumber.changes       
2023-11-01 22:10:01.923782059 +0100
@@ -1,0 +2,14 @@
+Tue Oct 31 08:30:21 UTC 2023 - Antonio Larrosa <alarr...@suse.com>
+
+- Add patch from upstream that fixes too many matches for property
+  interest:
+  * 0001-object-manager-reduce-the-amount-of-globals-that-initially.patch
+- Add patch from upstream that fixes an odd failure of a test after
+  applying the previous patch:
+  * 0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch
+- Add patch from upstream that adds ability to hide parent nodes,
+  which is useful to prevent hardware misuse or damage by poorly
+  behaved/configured clients:
+  * 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch
+
+-------------------------------------------------------------------

New:
----
  0001-object-manager-reduce-the-amount-of-globals-that-initially.patch
  0001-policy-dsp-add-ability-to-hide-parent-nodes.patch
  0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wireplumber.spec ++++++
--- /var/tmp/diff_new_pack.jW9FGV/_old  2023-11-01 22:10:02.475802509 +0100
+++ /var/tmp/diff_new_pack.jW9FGV/_new  2023-11-01 22:10:02.479802656 +0100
@@ -30,6 +30,12 @@
 URL:            https://gitlab.freedesktop.org/pipewire/wireplumber
 Source0:        wireplumber-%{version}.tar.xz
 Source1:        split-config-file.py
+# PATCH-FIX-UPSTREAM
+Patch0:         
0001-object-manager-reduce-the-amount-of-globals-that-initially.patch
+# PATCH-FIX-UPSTREAM
+Patch1:         
0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch
+# PATCH-FIX-UPSTREAM
+Patch2:         0001-policy-dsp-add-ability-to-hide-parent-nodes.patch
 # docs
 BuildRequires:  doxygen
 BuildRequires:  graphviz

++++++ 0001-object-manager-reduce-the-amount-of-globals-that-initially.patch 
++++++
>From 5fc7e68d109b646c550e3fdeddebadc5047137a2 Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiada...@collabora.com>
Date: Mon, 23 Oct 2023 23:04:02 +0300
Subject: [PATCH] object-manager: reduce the amount of globals that initially
 match the interest

With the previous check, any global matching either the type or the global
properties of the interest would be considered for inclusion in the object
manager and would be prepared only to fail the same check later.

The correct way to check is (variable & (X|Y) == (X|Y)), which is what
SPA_FLAG_IS_SET() expands to.

Fixes #517
---
 lib/wp/object-manager.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/wp/object-manager.c b/lib/wp/object-manager.c
index 6f58653ba..dea7857e1 100644
--- a/lib/wp/object-manager.c
+++ b/lib/wp/object-manager.c
@@ -638,8 +638,8 @@ wp_object_manager_is_interested_in_global (WpObjectManager 
* self,
     /* and consider the manager interested if the type and the globals match...
        if pw_properties / g_properties fail, that's ok because they are not
        known yet (the proxy is likely NULL and properties not yet retrieved) */
-    if (match & (WP_INTEREST_MATCH_GTYPE |
-                 WP_INTEREST_MATCH_PW_GLOBAL_PROPERTIES)) {
+    if (SPA_FLAG_IS_SET (match, (WP_INTEREST_MATCH_GTYPE |
+                                 WP_INTEREST_MATCH_PW_GLOBAL_PROPERTIES))) {
       gpointer ft = g_hash_table_lookup (self->features,
           GSIZE_TO_POINTER (global->type));
       *wanted_features = (WpObjectFeatures) GPOINTER_TO_UINT (ft);
-- 
GitLab


++++++ 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch ++++++
>From 7a65d76a57a5a656a5d9385b0144d15b376ddc7d Mon Sep 17 00:00:00 2001
From: James Calligeros <jcalligero...@gmail.com>
Date: Sun, 29 Oct 2023 11:03:36 +1000
Subject: [PATCH] policy-dsp: add ability to hide parent nodes

some hardware devices are never supposed to be accessed directly by
clients, and are designed under the assumption that they will be
front-loaded by some sort of DSP. add a hide_parent property
to policy-dsp and revoke all permissions to the bound node of a DSP
graph where this is set to prevent hardware misuse or damage by poorly
behaved/configured clients.

Signed-off-by: James Calligeros <jcalligero...@gmail.com>
---
 src/scripts/policy-dsp.lua | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/scripts/policy-dsp.lua b/src/scripts/policy-dsp.lua
index 55f86c68..ce23a67a 100644
--- a/src/scripts/policy-dsp.lua
+++ b/src/scripts/policy-dsp.lua
@@ -28,7 +28,12 @@ nodes_om = ObjectManager {
   Interest { type = "node" },
 }
 
+clients_om = ObjectManager {
+  Interest { type = "client" }
+}
+
 filter_chains = {}
+hidden_nodes = {}
 
 nodes_om:connect("object-added", function (om, node)
   for _, r in ipairs(config.rules or {}) do
@@ -43,6 +48,17 @@ nodes_om:connect("object-added", function (om, node)
             filter_chains[id] = LocalModule("libpipewire-module-filter-chain", 
r.filter_chain, {}, true)
           end
         end
+
+        if r.hide_parent then
+          Log.debug("Hiding node " .. node["bound-id"] .. " from clients")
+          for client in clients_om:iterate { type = "client" } do
+            if not client["properties"]["wireplumber.daemon"] then
+              client:update_permissions { [node["bound-id"]] = "-" }
+            end
+          end
+          hidden_nodes[node["bound-id"]] = id
+        end
+
       end
     end
   end
@@ -58,4 +74,13 @@ nodes_om:connect("object-removed", function (om, node)
   end
 end)
 
+clients_om:connect("object-added", function (om, client)
+  for id, _ in pairs(hidden_nodes) do
+    if not client["properties"]["wireplumber.daemon"] then
+      client:update_permissions { [id] = "-" }
+    end
+  end
+end)
+
 nodes_om:activate()
+clients_om:activate()
-- 
GitLab


++++++ 0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch 
++++++
>From 23ba01970f2520fb30fddc4ee911d77cdda9ac22 Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiada...@collabora.com>
Date: Mon, 23 Oct 2023 23:08:45 +0300
Subject: [PATCH] object-manager: use an idle callback to expose tmp globals
 instead of pw_core_sync

A core sync is not really necessary here because whatever objects the remote
pipewire daemon has to announce have already been sent to us on a message
and this message is already being processed at this point. This means, we are
not going to be returning to the main loop until all the new objects have been
announced and therefore placed into the tmp globals array. So, we can also use
an idle callback and achieve the same effect of slightly delaying until all
new globals have been announced.

With an idle callback, we can be more agile and add those new objects 
immediately
after the message has been processed instead of waiting for a pw_core_sync()
reply, which will come in the next message.

This fixes an odd failure of the si-standard-link test after applying the fix
for #517, which was caused by the fact that the test was previously relying on
a delay caused by some unrelated globals being prepared in the object manager
that tries to verify the graph state. After those globals were removed from the
internal preparation queue, the test would fail to detect the link objects
because they were stuck in the tmp_globals array for too long.
---
 lib/wp/object-manager.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/lib/wp/object-manager.c b/lib/wp/object-manager.c
index dea7857e..816db6dc 100644
--- a/lib/wp/object-manager.c
+++ b/lib/wp/object-manager.c
@@ -1047,18 +1047,15 @@ wp_registry_detach (WpRegistry *self)
   }
 }
 
-static void
-expose_tmp_globals (WpCore *core, GAsyncResult *res, WpRegistry *self)
+static gboolean
+expose_tmp_globals (WpCore *core)
 {
-  g_autoptr (GError) error = NULL;
+  WpRegistry *self = wp_core_get_registry (core);
   g_autoptr (GPtrArray) tmp_globals = NULL;
 
-  if (!wp_core_sync_finish (core, res, &error))
-    wp_warning_object (core, "core sync error: %s", error->message);
-
   /* in case the registry was cleared in the meantime... */
   if (G_UNLIKELY (!self->tmp_globals))
-    return;
+    return G_SOURCE_REMOVE;
 
   /* steal the tmp_globals list and replace it with an empty one */
   tmp_globals = self->tmp_globals;
@@ -1082,8 +1079,8 @@ expose_tmp_globals (WpCore *core, GAsyncResult *res, 
WpRegistry *self)
         wp_global_rm_flag (old_g, WP_GLOBAL_FLAG_OWNED_BY_PROXY);
     }
 
-    g_return_if_fail (self->globals->len <= g->id ||
-        g_ptr_array_index (self->globals, g->id) == NULL);
+    g_return_val_if_fail (self->globals->len <= g->id ||
+        g_ptr_array_index (self->globals, g->id) == NULL, G_SOURCE_REMOVE);
 
     /* set the registry, so that wp_global_rm_flag() can work full-scale */
     g->registry = self;
@@ -1109,6 +1106,8 @@ expose_tmp_globals (WpCore *core, GAsyncResult *res, 
WpRegistry *self)
     }
     wp_object_manager_maybe_objects_changed (om);
   }
+
+  return G_SOURCE_REMOVE;
 }
 
 /*
@@ -1159,7 +1158,8 @@ wp_registry_prepare_new_global (WpRegistry * self, 
guint32 id,
 
     /* schedule exposing when adding the first global */
     if (self->tmp_globals->len == 1) {
-      wp_core_sync (core, NULL, (GAsyncReadyCallback) expose_tmp_globals, 
self);
+      wp_core_idle_add_closure (core, NULL,
+          g_cclosure_new_object (G_CALLBACK (expose_tmp_globals), G_OBJECT 
(core)));
     }
   } else {
     /* store the most permissive permissions */
-- 
GitLab

Reply via email to