[lvm-devel] master - libdm: do not leak FIEMAP extent buffer if pool allocation fails (coverity)

Bryn Reeves bmr at sourceware.org
Wed Mar 29 20:16:36 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=bc5d67884fd489682c0267002474e9089e368fe2
Commit:        bc5d67884fd489682c0267002474e9089e368fe2
Parent:        13426092e9681d13acfa9eae505b20537c236340
Author:        Bryn M. Reeves <bmr at redhat.com>
AuthorDate:    Wed Mar 29 17:37:10 2017 +0100
Committer:     Bryn M. Reeves <bmr at redhat.com>
CommitterDate: Wed Mar 29 18:34:30 2017 +0100

libdm: do not leak FIEMAP extent buffer if pool allocation fails (coverity)

---
 libdm/libdm-stats.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index fa865a1..5041d61 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -4401,10 +4401,14 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
 	unsigned long flags = 0;
 	uint64_t *buf;
 
+	/* grow temporary extent table in the pool */
+	if (!dm_pool_begin_object(mem, sizeof(*extents)))
+		return NULL;
+
 	buf = dm_zalloc(STATS_FIE_BUF_LEN);
 	if (!buf) {
 		log_error("Could not allocate memory for FIEMAP buffer.");
-		return NULL;
+		goto bad;
 	}
 
 	/* initialise pointers into the ioctl buffer. */
@@ -4415,10 +4419,6 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
 	*count = (STATS_FIE_BUF_LEN - sizeof(*fiemap))
 		  / sizeof(struct fiemap_extent);
 
-	/* grow temporary extent table in the pool */
-	if (!dm_pool_begin_object(mem, sizeof(*extents)))
-		return NULL;
-
 	flags = FIEMAP_FLAG_SYNC;
 
 	do {




More information about the lvm-devel mailing list