summaryrefslogtreecommitdiff
path: root/libpam/pam_start.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2011-12-26 18:10:29 +0000
committerDmitry V. Levin <ldv@altlinux.org>2011-12-26 18:10:29 +0000
commitc9148666f5d9dd59804a3d29c59207ef067f7093 (patch)
tree8962f81a36c75e6b0aef2e41a7e38ef95471f49e /libpam/pam_start.c
parentaea290af6d2de6a493e952b9ef8c771ab9014fef (diff)
pam_start: fix memory leak on error path
* libpam/pam_start.c (pam_start): If _pam_make_env() or _pam_init_handlers() returned an error, release the memory allocated for pam_conv structure. Patch-by: cancel <suntsu@yandex.ru>.
Diffstat (limited to 'libpam/pam_start.c')
-rw-r--r--libpam/pam_start.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libpam/pam_start.c b/libpam/pam_start.c
index b7cd771e..328416d2 100644
--- a/libpam/pam_start.c
+++ b/libpam/pam_start.c
@@ -111,6 +111,7 @@ int pam_start (
(*pamh)->data = NULL;
if ( _pam_make_env(*pamh) != PAM_SUCCESS ) {
pam_syslog(*pamh,LOG_ERR,"pam_start: failed to initialize environment");
+ _pam_drop((*pamh)->pam_conversation);
_pam_drop((*pamh)->service_name);
_pam_drop((*pamh)->user);
_pam_drop(*pamh);
@@ -127,6 +128,7 @@ int pam_start (
if ( _pam_init_handlers(*pamh) != PAM_SUCCESS ) {
pam_syslog(*pamh, LOG_ERR, "pam_start: failed to initialize handlers");
_pam_drop_env(*pamh); /* purge the environment */
+ _pam_drop((*pamh)->pam_conversation);
_pam_drop((*pamh)->service_name);
_pam_drop((*pamh)->user);
_pam_drop(*pamh);