On Mon, Dec 26, 2011 at 09:10:22PM +0400, Dmitry V. Levin wrote:
On Sat, Dec 24, 2011 at 03:18:22PM +0400, cancel wrote:
[...]
Yes, there is a memory leak in pam_start() on error path.
If there are no objections, I'll push this fix:
From c9148666f5d9dd59804a3d29c59207ef067f7093 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv(a)altlinux.org>
Date: Mon, 26 Dec 2011 18:10:29 +0000
Subject: [PATCH] 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(a)yandex.ru>.
---
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 b7cd771..328416d 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);
--
ldv