Bug 92446

Summary: gdu segfaults due to udisks_client_get_object returning null
Product: udisks Reporter: Sebastien Bacher <seb128>
Component: generalAssignee: Martin Pitt <martin.pitt>
Status: NEW --- QA Contact:
Severity: normal    
Priority: medium CC: mcatanzaro
Version: unspecified   
Hardware: Other   
OS: All   
See Also: https://bugzilla.gnome.org/show_bug.cgi?id=756275
Whiteboard:
i915 platform: i915 features:

Description Sebastien Bacher 2015-10-13 09:17:36 UTC
Reported on https://bugs.launchpad.net/ubuntu/+source/gnome-disk-utility/+bug/1479710 and https://retrace.fedoraproject.org/faf/reports/bthash/8281bb04e3d96be71f0533b318776dc95cc087b2

It seems to be easy to trigger by removing/adding partitions on an usb stick

backtrace

"#1  0xb76a89b1 in udisks_object_peek_drive (object=0x0) at udisks-generated.c:31392
        ret = <optimized out>
#2  0x08064560 in gdu_window_select_object (window=0xa1061a8, object=0x0) at gduwindow.c:882
        ret = 168845736
        partition = 0xa06fb10
        table = 0x0
        drive = 0x0
#3  0x0806ed73 in create_partition_cb (source_object=0xa1061a8, res=0x0, user_data=0xa22c3f8) at gducreatepartitiondialog.c:374
        error = 0x0
        created_partition_object_path = 0xa393e90 "/org/freedesktop/UDisks2/block_devices/sdf1"
        partition_object = 0x0
        options_builder = {x = {3062377923, 3062363303, 3063296000, 167964752, 3062447638, 168661408, 0, 3062377865, 3062670108, 3062447607, 3063296000, 0, 3062378169, 167964752, 0, 167760240}}
        fstype = 0xa06e048 "\001"
#4  0xb6a40450 in g_task_return_now (task=task@entry=0xa02f658) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gtask.c:1104
No locals.
#5  0xb6a40b3a in g_task_return (task=0xa02f658, type=<optimized out>) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gtask.c:1162
        source = 0xb424e100
#6  0xb6a9dbf4 in reply_cb (connection=0xa028960, res=0xa02f880, user_data=0xa02f658) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gdbusproxy.c:2579
        data = <optimized out>
        task = 0xa02f658
        value = 0xb4212fc0
        error = 0x0
        fd_list = 0x0
#7  0xb6a40450 in g_task_return_now (task=task@entry=0xa02f880) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gtask.c:1104
No locals.
#8  0xb6a40b3a in g_task_return (task=0xa02f880, type=<optimized out>) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gtask.c:1162
        source = 0xb424e100
#9  0xb6a92110 in g_dbus_connection_call_done (source=0xa028960, result=0xa02f808, user_data=0xa02f880) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gdbusconnection.c:5704
        connection = 0xa028960
        task = 0xa02f880
        state = 0xa0e1500
        error = 0x0
        reply = 0xa2fc380
        value = <optimized out>
#10 0xb6a40450 in g_task_return_now (task=task@entry=0xa02f808) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gtask.c:1104
No locals.
#11 0xb6a4049b in complete_in_idle_cb (task=0xa02f808) at /build/glib2.0-Lm6jKr/glib2.0-2.45.7/./gio/gtask.c:1118
No locals.""


Reported on https://bugzilla.gnome.org/show_bug.cgi?id=756275 where the maintainer added this comment

"This doesn't look like an easy fix. We can return early in create_partition_cb if udisks_client_get_object returns NULL, but it's probably better to crash because the partition is not going to be formatted then. We need to figure out why udisks_client_get_object sometimes returns NULL."


Doing some debugging with gdu create_partition_cb() in gducreatepartitiondialog.c


"udisks_client_settle (gdu_window_get_client (data->window));
sleep(3);
partition_object = udisks_client_get_object (gdu_window_get_client (data->window), created_partition_object_path);
system("udisksctl dump > /tmp/log");
g_print("%x\n", (unsigned int)partition_object);"

When it segfaults the udiskctl dump knowns about sbd1 but the partition_object is null...
Comment 1 Richard B. Kreckel 2016-10-04 19:04:39 UTC
Any insight? I'm still getting this segfault with gnome-disk-utility 3.22 and udisks 2.1.7.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.