]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
login: fix mem leak in init_environ() [coverity scan]
authorKarel Zak <kzak@redhat.com>
Thu, 29 Jan 2015 10:25:07 +0000 (11:25 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 29 Jan 2015 10:25:07 +0000 (11:25 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
login-utils/login.c

index 8772068c7ea5aee3154d2c2d3fe663bcfc16881f..8d4b01b10ecf7e5b6adcfa88dce550a825f09b0b 100644 (file)
@@ -1038,12 +1038,13 @@ static void fork_session(struct login_context *cxt)
 static void init_environ(struct login_context *cxt)
 {
        struct passwd *pwd = cxt->pwd;
-       char *termenv = NULL, **env;
+       char *termenv, **env;
        char tmp[PATH_MAX];
        int len, i;
 
        termenv = getenv("TERM");
-       termenv = termenv ? xstrdup(termenv) : "dumb";
+       if (termenv)
+               termenv = xstrdup(termenv);
 
        /* destroy environment unless user has requested preservation (-p) */
        if (!cxt->keep_env) {
@@ -1054,7 +1055,8 @@ static void init_environ(struct login_context *cxt)
        setenv("HOME", pwd->pw_dir, 0); /* legal to override */
        setenv("USER", pwd->pw_name, 1);
        setenv("SHELL", pwd->pw_shell, 1);
-       setenv("TERM", termenv, 1);
+       setenv("TERM", termenv ? termenv : "dumb", 1);
+       free(termenv);
 
        if (pwd->pw_uid)
                logindefs_setenv("PATH", "ENV_PATH", _PATH_DEFPATH);