From: Sami Kerola Date: Thu, 12 Nov 2020 23:40:30 +0000 (+0000) Subject: login: stop keeping timeout message in memory forever X-Git-Tag: v2.37-rc1~257 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bfcba3f586a0bf060ec650ab0eabc0f6bec05c19;p=thirdparty%2Futil-linux.git login: stop keeping timeout message in memory forever When the timeout is cancelled the message can be removed from memory. Signed-off-by: Sami Kerola --- diff --git a/login-utils/login.c b/login-utils/login.c index 59942fc173..0bf64f42cb 100644 --- a/login-utils/login.c +++ b/login-utils/login.c @@ -154,7 +154,7 @@ struct login_context { static unsigned int timeout = LOGIN_TIMEOUT; static int child_pid = 0; static volatile sig_atomic_t got_sig = 0; -static char timeout_msg[128]; +static char *timeout_msg; #ifdef LOGIN_CHOWN_VCS /* true if the filedescriptor fd is a console tty, very Linux specific */ @@ -196,7 +196,8 @@ static void timedout(int sig __attribute__ ((__unused__))) { signal(SIGALRM, timedout2); alarm(10); - ignore_result( write(STDERR_FILENO, timeout_msg, strlen(timeout_msg)) ); + if (timeout_msg) + ignore_result( write(STDERR_FILENO, timeout_msg, strlen(timeout_msg)) ); signal(SIGALRM, SIG_IGN); alarm(0); timedout2(0); @@ -1290,9 +1291,8 @@ int main(int argc, char **argv) textdomain(PACKAGE); /* TRANSLATORS: The standard value for %u is 60. */ - snprintf(timeout_msg, sizeof(timeout_msg), - _("%s: timed out after %u seconds"), - program_invocation_short_name, timeout); + xasprintf(&timeout_msg, _("%s: timed out after %u seconds"), + program_invocation_short_name, timeout); signal(SIGALRM, timedout); (void) sigaction(SIGALRM, NULL, &act); @@ -1414,6 +1414,8 @@ int main(int argc, char **argv) /* committed to login -- turn off timeout */ alarm((unsigned int)0); + free(timeout_msg); + timeout_msg = NULL; endpwent();