[quota/f19] Close FILE handles on error too

Petr Pisar ppisar at fedoraproject.org
Thu Jun 13 15:13:20 UTC 2013


commit 72d4ab553cb86629fdd48f123e37429dd9c2083c
Author: Petr Písař <ppisar at redhat.com>
Date:   Thu Jun 13 17:05:04 2013 +0200

    Close FILE handles on error too

 quota-4.01-Close-FILE-handles-on-error.patch |  101 ++++++++++++++++++++++++++
 quota.spec                                   |    8 ++-
 2 files changed, 108 insertions(+), 1 deletions(-)
---
diff --git a/quota-4.01-Close-FILE-handles-on-error.patch b/quota-4.01-Close-FILE-handles-on-error.patch
new file mode 100644
index 0000000..46e82af
--- /dev/null
+++ b/quota-4.01-Close-FILE-handles-on-error.patch
@@ -0,0 +1,101 @@
+From d26e316c3ffd4658b25f14ea1c42384f251c96de Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
+Date: Thu, 13 Jun 2013 16:11:30 +0200
+Subject: [PATCH] Close FILE handles on error
+
+Functions for reading quota specification in quotaops.c create new
+temporary FILE stream handle, they close it on successful return,
+but they forget to close it on unsuccessful return. That leads to
+memory leaks. This patch ensures that the handle gets closed in all
+cases.
+---
+ quotaops.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/quotaops.c b/quotaops.c
+index 175a945..47ef9a7 100644
+--- a/quotaops.c
++++ b/quotaops.c
+@@ -334,42 +334,49 @@ int readprivs(struct dquot *qlist, int infd)
+ 
+ 		if (cnt != 7) {
+ 			errstr(_("Bad format:\n%s\n"), line);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		error = str2space(blocksstring, &blocks);
+ 		if (error) {
+ 			errstr(_("Bad block usage: %s: %s\n"),
+ 				blocksstring, error);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		error = str2space(bsoftstring, &bsoft);
+ 		if (error) {
+ 			errstr(_("Bad block soft limit: %s: %s\n"),
+ 				bsoftstring, error);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		error = str2space(bhardstring, &bhard);
+ 		if (error) {
+ 			errstr(_("Bad block hard limit: %s: %s\n"),
+ 				bhardstring, error);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		error = str2number(inodesstring, &inodes);
+ 		if (error) {
+ 			errstr(_("Bad inode usage: %s: %s\n"),
+ 				inodesstring, error);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		error = str2number(isoftstring, &isoft);
+ 		if (error) {
+ 			errstr(_("Bad inode soft limit: %s: %s\n"),
+ 				isoftstring, error);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		error = str2number(ihardstring, &ihard);
+ 		if (error) {
+ 			errstr(_("Bad inode hard limit: %s: %s\n"),
+ 				ihardstring, error);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 
+@@ -478,6 +485,7 @@ int readindividualtimes(struct dquot *qlist, int infd)
+ 		if (cnt != 3) {
+ format_err:
+ 			errstr(_("bad format:\n%s\n"), line);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		if (!strcmp(btimestr, _("unset")))
+@@ -488,6 +496,7 @@ format_err:
+ 			if (str2timeunits(btime, bunits, &bseconds) < 0) {
+ units_err:
+ 				errstr(_("Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n"));
++				fclose(fd);
+ 				return -1;
+ 			}
+ 			bseconds += now;
+@@ -576,11 +585,13 @@ int readtimes(struct quota_handle **handles, int infd)
+ 		cnt = sscanf(line, "%s %d %s %d %s", fsp, &btime, bunits, &itime, iunits);
+ 		if (cnt != 5) {
+ 			errstr(_("bad format:\n%s\n"), line);
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		if (str2timeunits(btime, bunits, &bseconds) < 0 ||
+ 		    str2timeunits(itime, iunits, &iseconds) < 0) {
+ 			errstr(_("Bad time units. Units are 'second', 'minute', 'hour', and 'day'.\n"));
++			fclose(fd);
+ 			return -1;
+ 		}
+ 		for (i = 0; handles[i]; i++) {
+-- 
+1.8.1.4
+
diff --git a/quota.spec b/quota.spec
index 4e7e858..38746d4 100644
--- a/quota.spec
+++ b/quota.spec
@@ -5,7 +5,7 @@ Name: quota
 Summary: System administration tools for monitoring users' disk usage
 Epoch: 1
 Version: 4.01
-Release: 7%{?dist}
+Release: 8%{?dist}
 # quota_nld.c, quotaio_xfs.h:       GPLv2
 # bylabel.c copied from util-linux: GPLv2+
 # svc_socket.c copied from glibc:   LGPLv2+
@@ -55,6 +55,8 @@ Patch14: quota-4.01-Recognize-units-at-block-limits-by-edquota.patch
 Patch15: quota-4.01-Recognize-units-at-inode-limits-by-setquota.patch
 # In upstream after 4.01, SF#3600120
 Patch16: quota-4.01-Recognize-units-at-inode-limits-by-edquota.patch
+# Submited to upstream
+Patch17: quota-4.01-Close-FILE-handles-on-error.patch
 
 
 %description
@@ -144,6 +146,7 @@ Linux/UNIX environment.
 %patch14 -p1 -b .edquota_block_units
 %patch15 -p1 -b .setquota_inode_units
 %patch16 -p1 -b .edquota_inode_units
+%patch17 -p1 -b .close_file_handles
 
 #fix typos/mistakes in localized documentation
 for pofile in $(find ./po/*.p*)
@@ -251,6 +254,9 @@ echo '  systemd-sysv-convert --apply quota_nld'
 
 
 %changelog
+* Thu Jun 13 2013 Petr Pisar <ppisar at redhat.com> - 1:4.01-8
+- Close FILE handles on error too
+
 * Wed Jun 12 2013 Petr Pisar <ppisar at redhat.com> - 1:4.01-7
 - Allow to set limits using multiplicative units
 


More information about the scm-commits mailing list