summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Todaro <solpeth@posteo.org>2022-05-12 10:04:21 +1000
committerMike Gilbert <floppym@gentoo.org>2022-05-11 22:34:38 -0400
commit5ebd24e8a995df10e7873a8a81e78b0ae594347f (patch)
tree9b165db9fc0eab2b6dd04967f5a97c12f44f36af /sys-apps/dbus-broker/files
parentsys-apps/bubblewrap: Version bump to 0.6.2 (diff)
downloadgentoo-5ebd24e8a995df10e7873a8a81e78b0ae594347f.tar.gz
gentoo-5ebd24e8a995df10e7873a8a81e78b0ae594347f.tar.bz2
gentoo-5ebd24e8a995df10e7873a8a81e78b0ae594347f.zip
sys-apps/dbus-broker: bump up to 30
Also include upstream patch for runtime crash, https://github.com/bus1/dbus-broker/commit/608b259e25ef1348b9e4a8e022c35b5c68d3df98 Package-Manager: Portage-3.0.30, Repoman-3.0.3 Closes: https://github.com/gentoo/gentoo/pull/25450 Signed-off-by: Jack Todaro <solpeth@posteo.org> Signed-off-by: Mike Gilbert <floppym@gentoo.org>
Diffstat (limited to 'sys-apps/dbus-broker/files')
-rw-r--r--sys-apps/dbus-broker/files/dbus-broker-30-user-free-assertion.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/sys-apps/dbus-broker/files/dbus-broker-30-user-free-assertion.patch b/sys-apps/dbus-broker/files/dbus-broker-30-user-free-assertion.patch
new file mode 100644
index 000000000000..278de1821b87
--- /dev/null
+++ b/sys-apps/dbus-broker/files/dbus-broker-30-user-free-assertion.patch
@@ -0,0 +1,64 @@
+From 608b259e25ef1348b9e4a8e022c35b5c68d3df98 Mon Sep 17 00:00:00 2001
+From: David Rheinsberg <david.rheinsberg@gmail.com>
+Date: Wed, 11 May 2022 08:41:48 +0200
+Subject: [PATCH] util/user: keep reference to user in each usage table
+
+Keep a reference to an owning user in each usage table. We want to allow
+callers to hold charges without holding on to any user references.
+
+Also fix the peer-deinitialization to be ordered correctly and free the
+user references last (in particular, after the charges). This is not
+strictly necessary, but now follows our coding style and would have
+avoided possible failures.
+
+This fixes an assertion failure when disconnecting entire groups of
+peers of the same user, due to the recent fix that actually made
+peer-accounting do something.
+
+Reported-by: Torge Matthies
+Reported-by: Mel34
+Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>
+---
+ src/bus/peer.c | 2 +-
+ src/util/user.c | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/bus/peer.c b/src/bus/peer.c
+index 18bd1947..69ed0fde 100644
+--- a/src/bus/peer.c
++++ b/src/bus/peer.c
+@@ -358,12 +358,12 @@ Peer *peer_free(Peer *peer) {
+ name_owner_deinit(&peer->owned_names);
+ policy_snapshot_free(peer->policy);
+ connection_deinit(&peer->connection);
+- user_unref(peer->user);
+ user_charge_deinit(&peer->charges[2]);
+ user_charge_deinit(&peer->charges[1]);
+ user_charge_deinit(&peer->charges[0]);
+ free(peer->seclabel);
+ free(peer->gids);
++ user_unref(peer->user);
+ free(peer);
+
+ close(fd);
+diff --git a/src/util/user.c b/src/util/user.c
+index 7856b768..d0edb5e8 100644
+--- a/src/util/user.c
++++ b/src/util/user.c
+@@ -48,7 +48,7 @@ static int user_usage_new(UserUsage **usagep, User *user, uid_t uid) {
+ return error_origin(-ENOMEM);
+
+ usage->n_refs = REF_INIT;
+- usage->user = user;
++ usage->user = user_ref(user);
+ usage->uid = uid;
+ usage->user_node = (CRBNode)C_RBNODE_INIT(usage->user_node);
+
+@@ -64,6 +64,7 @@ static void user_usage_free(_Atomic unsigned long *n_refs, void *userdata) {
+ c_assert(!usage->slots[i]);
+
+ user_usage_unlink(usage);
++ user_unref(usage->user);
+ free(usage);
+ }
+