diff options
author | Tobias Stoeckmann <tobias@stoeckmann.org> | 2024-01-01 20:49:24 +0100 |
---|---|---|
committer | Tobias Stoeckmann <tobias@stoeckmann.org> | 2024-01-01 20:49:24 +0100 |
commit | fdec452a05addc1c8f0f00449b6775fe2f383d8b (patch) | |
tree | 365427f7a07bcfe62bd1bfc28f752633a112887b /modules/pam_env/pam_env.c | |
parent | ec1fb9ddc6c252d8c61379e9385ca19c036fcb96 (diff) | |
download | pam-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/pam_env.c')
-rw-r--r-- | modules/pam_env/pam_env.c | 2 |
1 files changed, 2 insertions, 0 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 != "e) + 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); |