Comment 22 for bug 419663

Revision history for this message
In , Martin Pitt (pitti) wrote :

We get gazillions of dupes for this crash:

#0 0x00007fc4138ce4e5 in raise () from /lib/libc.so.6
#1 0x00007fc4138d1f80 in abort () from /lib/libc.so.6
#2 0x00007fc4138c74a1 in __assert_fail () from /lib/libc.so.6
#3 0x00007fc413c0d199 in sk_disk_set_blob (d=0x0,
    blob=<value optimized out>, size=<value optimized out>) at atasmart.c:2701
 p = <value optimized out>
 left = <value optimized out>
 idv = <value optimized out>
 sdv = <value optimized out>
 stv = <value optimized out>
 bssv = <value optimized out>
 __PRETTY_FUNCTION__ = "sk_disk_set_blob"
#4 0x000000000040e99a in drive_ata_smart_refresh_data_completed_cb (
    context=0x0, device=0x1f25c50, job_was_cancelled=<value optimized out>,
    status=<value optimized out>, stderr=<value optimized out>,
    stdout=<value optimized out>, user_data=0x1f674e0)
    at devkit-disks-device.c:7912
 rc = <value optimized out>
 good = <value optimized out>
 num_bad_sectors = <value optimized out>
 temperature_mkelvin = <value optimized out>
 power_on_mseconds = <value optimized out>
 asd = <value optimized out>
 d = (SkDisk *) 0x1f280c0
 blob = (guchar *) 0x0
 blob_size = 1
 time_collected = <value optimized out>
 is_failing = <value optimized out>
 is_failing_valid = <value optimized out>
 collect_attrs_data = {attributes = 0x0, has_bad_attributes = 1}
 db = <value optimized out>
#5 0x000000000040cb5b in job_child_watch_cb (pid=<value optimized out>,

(full trace at http://launchpadlibrarian.net/30901828/Stacktrace.txt, but that's the interesting bit).

The full assertion message is:

devkit-disks-daemon: atasmart.c:2701: sk_disk_set_blob: Assertion `blob' failed.

This crashes in this code in src/devkit-disks-device.c:

        blob = (gchar *) g_base64_decode (stdout, &blob_size);

        if (sk_disk_open (NULL, &d) != 0) {
                if (context != NULL) {
                        throw_error (context,
                                     DEVKIT_DISKS_ERROR_FAILED,
                                     "unable to open a SkDisk");
                }
                goto out;
        }

        if (sk_disk_set_blob (d, blob, blob_size) != 0) {

as the stack frame #4 shows, blob == NULL (which triggers the assertion in libatasmart).