[arch-commits] Commit in dbus-broker/trunk (2 files)

Jan Steffens heftig at gemini.archlinux.org
Wed May 11 12:05:26 UTC 2022


    Date: Wednesday, May 11, 2022 @ 12:05:26
  Author: heftig
Revision: 444995

30-2: fix asserts

Added:
  dbus-broker/trunk/0001-util-user-keep-reference-to-user-in-each-usage-table.patch
Modified:
  dbus-broker/trunk/PKGBUILD

-----------------------------------------------------------------+
 0001-util-user-keep-reference-to-user-in-each-usage-table.patch |   72 ++++++++++
 PKGBUILD                                                        |   11 +
 2 files changed, 80 insertions(+), 3 deletions(-)

Added: 0001-util-user-keep-reference-to-user-in-each-usage-table.patch
===================================================================
--- 0001-util-user-keep-reference-to-user-in-each-usage-table.patch	                        (rev 0)
+++ 0001-util-user-keep-reference-to-user-in-each-usage-table.patch	2022-05-11 12:05:26 UTC (rev 444995)
@@ -0,0 +1,72 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: David Rheinsberg <david.rheinsberg at 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 at 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 18bd1947ebc7..69ed0fde6933 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 7856b768e91e..d0edb5e83210 100644
+--- a/src/util/user.c
++++ b/src/util/user.c
+@@ -48,22 +48,23 @@ 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);
+ 
+         *usagep = usage;
+         return 0;
+ }
+ 
+ static void user_usage_free(_Atomic unsigned long *n_refs, void *userdata) {
+         UserUsage *usage = c_container_of(n_refs, UserUsage, n_refs);
+         size_t i;
+ 
+         for (i = 0; i < usage->user->registry->n_slots; ++i)
+                 c_assert(!usage->slots[i]);
+ 
+         user_usage_unlink(usage);
++        user_unref(usage->user);
+         free(usage);
+ }
+ 

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2022-05-11 08:00:53 UTC (rev 444994)
+++ PKGBUILD	2022-05-11 12:05:26 UTC (rev 444995)
@@ -3,7 +3,7 @@
 
 pkgname=dbus-broker
 pkgver=30
-pkgrel=1
+pkgrel=2
 pkgdesc="Linux D-Bus Message Broker"
 url="https://github.com/bus1/dbus-broker/wiki"
 arch=(x86_64)
@@ -11,11 +11,16 @@
 depends=(systemd-libs expat audit)
 makedepends=(meson systemd python-docutils)
 options=(debug)
-source=(https://github.com/bus1/dbus-broker/releases/download/v$pkgver/$pkgname-$pkgver.tar.xz)
-sha256sums=('bf22ba6a13680ba93b99f0bccb54dde9f4f6bdff5f298dbc8cdb067a80f3827a')
+source=(https://github.com/bus1/dbus-broker/releases/download/v$pkgver/$pkgname-$pkgver.tar.xz
+        0001-util-user-keep-reference-to-user-in-each-usage-table.patch)
+sha256sums=('bf22ba6a13680ba93b99f0bccb54dde9f4f6bdff5f298dbc8cdb067a80f3827a'
+            'e7107b54a0051e3945cfde3a8cfc617abcef63b38dd0c5783ba805fedab9e2d1')
 
 prepare() {
   cd $pkgname-$pkgver
+
+  # Fix asserts in system bus
+  patch -Np1 -i ../0001-util-user-keep-reference-to-user-in-each-usage-table.patch
 }
 
 build() {



More information about the arch-commits mailing list