diff --git a/src/kernel-install/kernel-install.c b/src/kernel-install/kernel-install.c index 6bee169bf41..d7c2aa3a4fa 100644 --- a/src/kernel-install/kernel-install.c +++ b/src/kernel-install/kernel-install.c @@ -1043,7 +1043,7 @@ static int context_prepare_execution(Context *c) { } static int context_execute(Context *c) { - int r; + int r, ret; assert(c); @@ -1062,7 +1062,7 @@ static int context_execute(Context *c) { log_debug("Plugin arguments: %s", strna(z)); } - r = execute_strv( + ret = execute_strv( /* name = */ NULL, c->plugins, /* root = */ NULL, @@ -1072,14 +1072,13 @@ static int context_execute(Context *c) { c->argv, c->envp, EXEC_DIR_SKIP_REMAINING); - if (r < 0) - return r; r = context_remove_entry_dir(c); if (r < 0) return r; - return 0; + /* This returns 0 on success, positive exit code on plugin failure, negative errno on other failures. */ + return ret; } static bool bypass(void) { @@ -1254,10 +1253,10 @@ static int verb_add_all(int argc, char *argv[], void *userdata) { /* version= */ (*d)->d_name, /* kernel= */ full, /* initrds= */ NULL); - RET_GATHER(ret, r); - - if (r >= 0) + if (r == 0) n++; + else if (ret == 0) + ret = r; } if (n > 0) @@ -1715,4 +1714,4 @@ static int run(int argc, char* argv[]) { return dispatch_verb(argc, argv, verbs, &c); } -DEFINE_MAIN_FUNCTION(run); +DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);