summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryn M. Reeves <bmr@redhat.com>2017-03-29 17:37:10 +0100
committerBryn M. Reeves <bmr@redhat.com>2017-03-29 18:34:30 +0100
commitbc5d67884fd489682c0267002474e9089e368fe2 (patch)
tree563dad5e753b3eb61eb7eb3785d3147013fca4a1
parent13426092e9681d13acfa9eae505b20537c236340 (diff)
downloadlvm2-bc5d67884fd489682c0267002474e9089e368fe2.tar.gz
libdm: do not leak FIEMAP extent buffer if pool allocation fails (coverity)
-rw-r--r--libdm/libdm-stats.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index fa865a125..5041d6112 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 {