]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
inhibit: fix argv[] usage
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Apr 2019 12:55:41 +0000 (14:55 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Apr 2019 14:57:39 +0000 (16:57 +0200)
Another fix in style of ed179fd71030ddd657500591dac37e7499fc7b2c and
bd169c2be0fbdaf6eb2ea7951e650d5e5983fbf6..

I hope we are soon complete with these.

Fixes: #12246
src/login/inhibit.c

index f574d429f49f8d0e1d87d331859dddc5d5391816..47fd9e874dab7f5f57492ae5fc7f58d9a04d333a 100644 (file)
@@ -286,8 +286,9 @@ static int run(int argc, char *argv[]) {
 
         else {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-                _cleanup_close_ int fd = -1;
+                _cleanup_strv_free_ char **arguments = NULL;
                 _cleanup_free_ char *w = NULL;
+                _cleanup_close_ int fd = -1;
                 pid_t pid;
 
                 /* Ignore SIGINT and allow the forked process to receive it */
@@ -303,12 +304,16 @@ static int run(int argc, char *argv[]) {
                 if (fd < 0)
                         return log_error_errno(fd, "Failed to inhibit: %s", bus_error_message(&error, fd));
 
+                arguments = strv_copy(argv + optind);
+                if (!arguments)
+                        return log_oom();
+
                 r = safe_fork("(inhibit)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_CLOSE_ALL_FDS|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG, &pid);
                 if (r < 0)
                         return r;
                 if (r == 0) {
                         /* Child */
-                        execvp(argv[optind], argv + optind);
+                        execvp(arguments[0], arguments);
                         log_open();
                         log_error_errno(errno, "Failed to execute %s: %m", argv[optind]);
                         _exit(EXIT_FAILURE);