File pam_ldap-fix-leaks.patch of Package pam_ldap.18221
From 2017376ac0adbcbadc386737980ebb71ae28e929 Mon Sep 17 00:00:00 2001
From: Biplab Sarkar <biplab.sarkar@nokia.com>
Date: Fri, 29 Nov 2019 14:39:49 +0530
Subject: [PATCH] fixed memory leaks
Update: Fix segfault in pam_sm_chauthtok().
Signed-off-by: Josef Cejka <jcejka@suse.com>
---
pam_ldap.c | 46 ++++++++++++++++++++++++++++++++++++++--------
1 file changed, 38 insertions(+), 8 deletions(-)
Index: pam_ldap-186/pam_ldap.c
===================================================================
--- pam_ldap-186.orig/pam_ldap.c
+++ pam_ldap-186/pam_ldap.c
@@ -142,6 +142,8 @@
#define ldap_memfree(x) free(x)
#endif
+#define FREE_IF(x) if(x != NULL){free(x); x = NULL;}
+
#ifdef __GNUC__
#define __UNUSED__ __attribute__ ((unused))
#else
@@ -517,7 +519,21 @@ _release_config (pam_ldap_config_t ** pc
{
free (c->password_prohibit_message);
}
-
+ if (c->ssd != NULL)
+ {
+ /*
+ This is a linked list.
+ */
+ pam_ssd_t *p_ssd = c->ssd;
+ while(p_ssd != NULL)
+ {
+ pam_ssd_t *p_ssd_next = p_ssd->next;
+ FREE_IF(p_ssd->base);
+ FREE_IF(p_ssd->filter);
+ FREE_IF(p_ssd);
+ p_ssd = p_ssd_next;
+ };
+ }
memset (c, 0, sizeof (*c));
free (c);
*pconfig = NULL;
@@ -3338,7 +3354,7 @@ static int
_get_authtok (pam_handle_t * pamh, int flags, int first)
{
int rc;
- char *p;
+ char *p = NULL;
struct pam_message msg[1], *pmsg[1];
struct pam_response *resp;
struct pam_conv *conv;
@@ -3379,7 +3395,7 @@ _get_authtok (pam_handle_t * pamh, int f
free (resp);
pam_set_item (pamh, PAM_AUTHTOK, p);
-
+ FREE_IF(p);
return PAM_SUCCESS;
}
@@ -3399,9 +3415,14 @@ _conv_sendmsg (struct pam_conv *aconv,
msg.msg = (char *) message;
resp = NULL;
- return aconv->conv (1,
+ int ret = aconv->conv (1,
(CONST_ARG struct pam_message **) &pmsg,
&resp, aconv->appdata_ptr);
+ if (resp != NULL) {
+ FREE_IF(resp->resp);
+ FREE_IF(resp);
+ }
+ return (ret);
}
PAM_EXTERN int