diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2011-12-26 18:10:29 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2011-12-26 18:10:29 +0000 |
commit | c9148666f5d9dd59804a3d29c59207ef067f7093 (patch) | |
tree | 8962f81a36c75e6b0aef2e41a7e38ef95471f49e /libpam/pam_start.c | |
parent | aea290af6d2de6a493e952b9ef8c771ab9014fef (diff) | |
download | pam-c9148666f5d9dd59804a3d29c59207ef067f7093.tar.gz pam-c9148666f5d9dd59804a3d29c59207ef067f7093.tar.bz2 pam-c9148666f5d9dd59804a3d29c59207ef067f7093.zip |
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.c | 2 |
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); |