From d9e44d146fe58659d10b65fd4a96091c6a281781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sun, 19 Feb 2017 17:46:22 +0000 Subject: [PATCH] Fix a bug that prevented the service name from being freed, thus leaking a small amount of memory for every PAM session. While there, eliminate an unnecessary variable. git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@918 185d5e19-27fe-0310-9dcf-9bff6b9f3609 --- lib/libpam/pam_set_item.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/libpam/pam_set_item.c b/lib/libpam/pam_set_item.c index cf3db65..f87ca69 100644 --- a/lib/libpam/pam_set_item.c +++ b/lib/libpam/pam_set_item.c @@ -60,7 +60,7 @@ pam_set_item(pam_handle_t *pamh, int item_type, const void *item) { - void **slot, *tmp; + void **slot; size_t nsize, osize; ENTERI(item_type); @@ -69,7 +69,7 @@ pam_set_item(pam_handle_t *pamh, switch (item_type) { case PAM_SERVICE: /* set once only, by pam_start() */ - if (*slot != NULL) + if (*slot != NULL && item != NULL) RETURNC(PAM_SYSTEM_ERR); /* fall through */ case PAM_USER: @@ -101,13 +101,12 @@ pam_set_item(pam_handle_t *pamh, FREE(*slot); } if (item != NULL) { - if ((tmp = malloc(nsize)) == NULL) + if ((*slot = malloc(nsize)) == NULL) RETURNC(PAM_BUF_ERR); - memcpy(tmp, item, nsize); + memcpy(*slot, item, nsize); } else { - tmp = NULL; + *slot = NULL; } - *slot = tmp; RETURNC(PAM_SUCCESS); }