]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
utils: cleanup get_rundir()
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 9 Dec 2020 10:39:29 +0000 (11:39 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Thu, 10 Dec 2020 19:39:55 +0000 (20:39 +0100)
Fixes: Coverity 1461740
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/utils.c

index 06c4716349e44c1e5089541bf7364fc9b9cc4c05..8c96a860591773bdfd583f207279b68d2153fc99 100644 (file)
@@ -240,7 +240,9 @@ int mkdir_p(const char *dir, mode_t mode)
 
 char *get_rundir()
 {
-       char *rundir;
+       __do_free char *rundir = NULL;
+       char *static_rundir;
+       int ret;
        size_t len;
        const char *homedir;
        struct stat sb;
@@ -251,9 +253,9 @@ char *get_rundir()
        if (geteuid() == sb.st_uid || getegid() == sb.st_gid)
                return strdup(RUNTIME_PATH);
 
-       rundir = getenv("XDG_RUNTIME_DIR");
-       if (rundir)
-               return strdup(rundir);
+       static_rundir = getenv("XDG_RUNTIME_DIR");
+       if (static_rundir)
+               return strdup(static_rundir);
 
        INFO("XDG_RUNTIME_DIR isn't set in the environment");
        homedir = getenv("HOME");
@@ -265,8 +267,11 @@ char *get_rundir()
        if (!rundir)
                return NULL;
 
-       snprintf(rundir, len, "%s/.cache/lxc/run/", homedir);
-       return rundir;
+       ret = snprintf(rundir, len, "%s/.cache/lxc/run/", homedir);
+       if (ret < 0 || (size_t)ret >= len)
+               return ret_set_errno(NULL, EIO);
+
+       return move_ptr(rundir);
 }
 
 int wait_for_pid(pid_t pid)