Package: libglib2.0-0
Version: 2.58.2-4
Severity: normal
Tags: patch upstream

Dear Maintainer,

Upstream bug has been fixed, see:
https://gitlab.gnome.org/GNOME/glib/issues/1645
Tested that applying e695ca9f310c393d8f39694f77471dbcb06daa9e.patch from issue 
on the debian package fixes the issue for me.

   * What led up to the situation?
   Opening gtk file dialog or file browser, root being btrfs subvolume probably 
related.
   * What was the outcome of this action?
   Crash on assertion.
   (pcmanfm:7963): GLib-GIO-CRITICAL **: 12:39:01.511: 
g_unix_is_system_fs_type: assertion 'fs_type != NULL && *fs_type != '\0'' failed
   (pcmanfm:7963): GLib-GIO-CRITICAL **: 12:39:01.511: 
g_unix_is_system_device_path: assertion 'device_path != NULL && *device_path != 
'\0'' failed
   * What outcome did you expect instead?
   Not crash.


-- System Information:
Debian Release: buster/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: arm64 (aarch64)

Kernel: Linux 4.19.16 (SMP w/6 CPU cores; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libglib2.0-0 depends on:
ii  libc6        2.28-5
ii  libffi6      3.2.1-9
ii  libmount1    2.33.1-0.1
ii  libpcre3     2:8.39-11
ii  libselinux1  2.8-1+b1
ii  zlib1g       1:1.2.11.dfsg-1

Versions of packages libglib2.0-0 recommends:
ii  libglib2.0-data   2.58.2-4
ii  shared-mime-info  1.10-1
ii  xdg-user-dirs     0.17-2

libglib2.0-0 suggests no packages.

-- no debconf information
>From e695ca9f310c393d8f39694f77471dbcb06daa9e Mon Sep 17 00:00:00 2001
From: Ondrej Holy <oh...@redhat.com>
Date: Wed, 9 Jan 2019 11:04:13 +0100
Subject: [PATCH] gunixmounts: Fix segfaults caused by new filter of mounts

Commit ed88b23f added libmount-based implementation to filter out mounts
with repeated device path. Unfortunately, this introduced a new bug, which
may cause segfaults from in certain configurations.

The problem is that `mnt_table_uniq_fs ()` is called from the loop which
already operates with the `fs` structs from that table. It may happen that
the current `fs` is removed from the table, which may consequently lead to
segfaults.

Closes: https://gitlab.gnome.org/GNOME/glib/issues/1645
---
 gio/gunixmounts.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
index 8cbd70f5f..6dc774158 100644
--- a/gio/gunixmounts.c
+++ b/gio/gunixmounts.c
@@ -486,6 +486,11 @@ _g_get_unix_mounts (void)
   if (mnt_table_parse_mtab (table, NULL) < 0)
     goto out;
 
+  /* Use only the first mount for device, see comment from _g_get_unix_mounts
+   * in #else branch.
+   */
+  mnt_table_uniq_fs (table, MNT_UNIQ_FORWARD, uniq_fs_source_cmp);
+
   iter = mnt_new_iter (MNT_ITER_FORWARD);
   while (mnt_table_next_fs (table, iter, &fs) == 0)
     {
@@ -494,11 +499,6 @@ _g_get_unix_mounts (void)
       unsigned long mount_flags = 0;
       gboolean is_read_only = FALSE;
 
-      /* Use only the first mount for device, see comment from 
_g_get_unix_mounts
-       * in #else branch.
-       */
-      mnt_table_uniq_fs (table, MNT_UNIQ_FORWARD, uniq_fs_source_cmp);
-
       device_path = mnt_fs_get_source (fs);
       if (g_strcmp0 (device_path, "/dev/root") == 0)
         device_path = _resolve_dev_root ();
-- 
2.18.1

Reply via email to