aboutsummaryrefslogtreecommitdiff
path: root/modules/pam_env
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2024-01-01 20:49:24 +0100
committerTobias Stoeckmann <tobias@stoeckmann.org>2024-01-01 20:49:24 +0100
commitfdec452a05addc1c8f0f00449b6775fe2f383d8b (patch)
tree365427f7a07bcfe62bd1bfc28f752633a112887b /modules/pam_env
parentec1fb9ddc6c252d8c61379e9385ca19c036fcb96 (diff)
downloadpam-fdec452a05addc1c8f0f00449b6775fe2f383d8b.tar.gz
pam-fdec452a05addc1c8f0f00449b6775fe2f383d8b.tar.bz2
pam-fdec452a05addc1c8f0f00449b6775fe2f383d8b.zip
pam_env: fix memory leak
If DEFAULT or OVERRIDE is supplied multiple times in a line then memory leaks can occur. Adjusted test case (compile with address sanitizer to see failure). Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Diffstat (limited to 'modules/pam_env')
-rw-r--r--modules/pam_env/pam_env.c2
-rw-r--r--modules/pam_env/tst-pam_env-retval.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/modules/pam_env/pam_env.c b/modules/pam_env/pam_env.c
index 2b33aa5f..74e02638 100644
--- a/modules/pam_env/pam_env.c
+++ b/modules/pam_env/pam_env.c
@@ -498,6 +498,8 @@ _parse_line(const pam_handle_t *pamh, const char *buffer, VAR *var)
quoteflg++;
}
if (length) {
+ if (*valptr != &quote)
+ free(*valptr);
if ((*valptr = malloc(length + 1)) == NULL) {
D(("Couldn't malloc %d bytes", length+1));
pam_syslog(pamh, LOG_CRIT, "Couldn't malloc %d bytes", length+1);
diff --git a/modules/pam_env/tst-pam_env-retval.c b/modules/pam_env/tst-pam_env-retval.c
index 23ad10b9..6e5558f2 100644
--- a/modules/pam_env/tst-pam_env-retval.c
+++ b/modules/pam_env/tst-pam_env-retval.c
@@ -69,7 +69,7 @@ setup(void)
ASSERT_NE(NULL, fp = fopen(my_conf, "w"));
ASSERT_LT(0, fprintf(fp,
- "EDITOR\tDEFAULT=vim\n"
+ "EDITOR\tDEFAULT=vi DEFAULT= DEFAULT=vim\n"
"PAGER\tDEFAULT=more\n"));
ASSERT_EQ(0, fclose(fp));