[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-pam-commits
Subject: [linux-pam] Avoid leaking memory and dir handle on realloc failure.
From: tmraz () fedoraproject ! org (=?utf-8?b?VG9tw6HFoSBNcsOheg==?=)
Date: 2011-06-15 19:00:15
Message-ID: 20110615190015.7A6361205C6 () lists ! fedorahosted ! org
[Download RAW message or body]
commit 62748f7df90225dc0635944ef59e6e4754c302c0
Author: Tomas Mraz <tmraz at fedoraproject.org>
Date: Wed Jun 15 18:48:12 2011 +0200
Avoid leaking memory and dir handle on realloc failure.
ChangeLog | 6 ++++++
modules/pam_sepermit/pam_sepermit.c | 12 +++++++++---
2 files changed, 15 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index d8c954d..7642831 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-06-15 Tomas Mraz <tm at t8m.info>
+
+ * modules/pam_sepermit/pam_sepermit.c (check_running): Avoid
+ leaking memory and dir handle on realloc failure.
+ (sepermit_unlock) Cast fcntl() and close() calls to void.
+
2011-06-14 Thorsten Kukuk <kukuk at thkukuk.de>
* configure.in: Check for libtirpc by default.
diff --git a/modules/pam_sepermit/pam_sepermit.c b/modules/pam_sepermit/pam_sepermit.c
index 8b2360b..4879b68 100644
--- a/modules/pam_sepermit/pam_sepermit.c
+++ b/modules/pam_sepermit/pam_sepermit.c
@@ -117,6 +117,7 @@ check_running (pam_handle_t *pamh, uid_t uid, int killall, int debug)
max_pids = 256;
pid_table = malloc(max_pids * sizeof (pid_t));
if (!pid_table) {
+ (void)closedir(dir);
pam_syslog(pamh, LOG_CRIT, "Memory allocation error");
return -1;
}
@@ -126,10 +127,15 @@ check_running (pam_handle_t *pamh, uid_t uid, int killall, int debug)
continue;
if (pids == max_pids) {
- if (!(pid_table = realloc(pid_table, 2*pids*sizeof(pid_t)))) {
+ pid_t *npt;
+
+ if (!(npt = realloc(pid_table, 2*pids*sizeof(pid_t)))) {
+ free(pid_table);
+ (void)closedir(dir);
pam_syslog(pamh, LOG_CRIT, "Memory allocation error");
return -1;
}
+ pid_table = npt;
max_pids *= 2;
}
pid_table[pids++] = pid;
@@ -175,8 +181,8 @@ sepermit_unlock(pam_handle_t *pamh, void *plockfd, int error_status UNUSED)
while(check_running(pamh, lockfd->uid, 1, lockfd->debug) > 0)
continue;
- fcntl(lockfd->fd, F_SETLK, &fl);
- close(lockfd->fd);
+ (void)fcntl(lockfd->fd, F_SETLK, &fl);
+ (void)close(lockfd->fd);
free(lockfd);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic