Fix segfault caused by standard_reboot_dm.c 83/159683/2
authorKonrad Kuchciak <k.kuchciak@samsung.com>
Fri, 10 Nov 2017 13:11:58 +0000 (14:11 +0100)
committerKrzysztof Opasiak <k.opasiak@samsung.com>
Fri, 17 Nov 2017 13:37:06 +0000 (14:37 +0100)
Change-Id: Ic85ca0b9e7b0c340c4b5d5624320731bebcfbce3
Signed-off-by: Konrad Kuchciak <k.kuchciak@samsung.com>
[Return -ENOENT instead of setting service_name to NULL]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
src/decision_makers/standard_reboot_dm.c

index a55869c663a61aba9a390ac2e0dde5ff68282100..c234e6936ce489a4eb521b5405853061c94ff7c1 100644 (file)
@@ -70,7 +70,9 @@ static int get_reboot_reason(faultd_oid_t *boot_event, char **service_name)
                goto unref_query_hints;
 
        ret = database_load(query, query_hints, result, &nr);
-       if (ret < 0 || nr == 0)
+       if (ret >= 0 && nr == 0)
+               ret = -ENOENT;
+       if (ret < 0)
                goto unref_result;
 
        faultd_object_unref(query);
@@ -136,7 +138,12 @@ static int sr_make_decision(struct faultd_event_handler *handler)
                /* get name of service which caused the reboot */
                ret = get_reboot_reason(&sb_ev->event.oid, &service_name);
                if (ret < 0) {
-                       log_debug("Unable to get reboot reason service name");
+                       if (ret == -ENOENT)
+                               log_debug("Unable to find reboot reason."
+                                                 " Assuming user-triggered reboot.");
+                       else
+                               log_debug("Unable to get reboot reason service name");
+
                        free(last_service_name);
                        faultd_event_unref(&sb_ev->event);
                        goto unref_ev;