mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-21 08:28:53 +02:00
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
This commit is contained in:
@@ -486,6 +486,11 @@ _g_get_unix_mounts (void)
|
|||||||
if (mnt_table_parse_mtab (table, NULL) < 0)
|
if (mnt_table_parse_mtab (table, NULL) < 0)
|
||||||
goto out;
|
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);
|
iter = mnt_new_iter (MNT_ITER_FORWARD);
|
||||||
while (mnt_table_next_fs (table, iter, &fs) == 0)
|
while (mnt_table_next_fs (table, iter, &fs) == 0)
|
||||||
{
|
{
|
||||||
@@ -494,11 +499,6 @@ _g_get_unix_mounts (void)
|
|||||||
unsigned long mount_flags = 0;
|
unsigned long mount_flags = 0;
|
||||||
gboolean is_read_only = FALSE;
|
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);
|
device_path = mnt_fs_get_source (fs);
|
||||||
if (g_strcmp0 (device_path, "/dev/root") == 0)
|
if (g_strcmp0 (device_path, "/dev/root") == 0)
|
||||||
device_path = _resolve_dev_root ();
|
device_path = _resolve_dev_root ();
|
||||||
|
Reference in New Issue
Block a user