]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
src/sulogin.c: Free previously allocated memory
authorSamanta Navarro <ferivoz@riseup.net>
Thu, 18 Jan 2024 11:53:41 +0000 (11:53 +0000)
committerSerge Hallyn <serge@hallyn.com>
Mon, 22 Jan 2024 21:40:39 +0000 (15:40 -0600)
The sulogin program calls pw_entry in a loop while incorrect root
passwords are entered.

Free the previously allocated memory to avoid memory exhaustion.

Co-developed-by: Alejandro Colomar <alx@kernel.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
src/sulogin.c

index ab2dcf9415c1492317617caf9a135c17eb5f3687..6633dd5d9f500d2790e958978687b49e4a6700ea 100644 (file)
@@ -199,22 +199,29 @@ pw_entry(const char *name, struct passwd *pwent)
        struct passwd  *passwd;
 
        if (!(passwd = getpwnam(name))) {  /* local, no need for xgetpwnam */
+               free(pwent->pw_name);
                pwent->pw_name = NULL;
                return;
        }
 
+       free(pwent->pw_name);
        pwent->pw_name = xstrdup(passwd->pw_name);
        pwent->pw_uid = passwd->pw_uid;
        pwent->pw_gid = passwd->pw_gid;
+       free(pwent->pw_gecos);
        pwent->pw_gecos = xstrdup(passwd->pw_gecos);
+       free(pwent->pw_dir);
        pwent->pw_dir = xstrdup(passwd->pw_dir);
+       free(pwent->pw_shell);
        pwent->pw_shell = xstrdup(passwd->pw_shell);
 #if !defined(AUTOSHADOW)
        /* local, no need for xgetspnam */
        if ((spwd = getspnam(name))) {
+               free(pwent->pw_passwd);
                pwent->pw_passwd = xstrdup(spwd->sp_pwdp);
                return;
        }
 #endif
+       free(pwent->pw_passwd);
        pwent->pw_passwd = xstrdup(passwd->pw_passwd);
 }