summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Al-Gaaf <danny.al-gaaf@bisect.de>2013-02-08 16:54:33 +0100
committerDanny Al-Gaaf <danny.al-gaaf@bisect.de>2013-02-10 10:05:05 +0100
commitc92a0f552587a232f66620170660d6b2ab6fb3a5 (patch)
treee09876ac6dc7a66f3358e1b762467b113df83817
parentf26f1470e7af36fa1eb8dc59c8a7c62c3c3a22ba (diff)
downloadceph-c92a0f552587a232f66620170660d6b2ab6fb3a5.tar.gz
os/FileStore.cc: fix realloc memory leak in error case
Fix error from cppcheck: [src/os/FileStore.cc:512]: (error) Common realloc mistake: 'fiemap' nulled but not freed upon failure Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
-rw-r--r--src/os/FileStore.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc
index 1bab9c3c36d..44f3b571960 100644
--- a/src/os/FileStore.cc
+++ b/src/os/FileStore.cc
@@ -490,6 +490,7 @@ bool parse_attrname(char **name)
static int do_fiemap(int fd, off_t start, size_t len, struct fiemap **pfiemap)
{
struct fiemap *fiemap = NULL;
+ struct fiemap *_realloc_fiemap = NULL;
int size;
int ret;
@@ -509,11 +510,13 @@ static int do_fiemap(int fd, off_t start, size_t len, struct fiemap **pfiemap)
size = sizeof(struct fiemap_extent) * (fiemap->fm_mapped_extents);
- fiemap = (struct fiemap *)realloc(fiemap, sizeof(struct fiemap) +
+ _realloc_fiemap = (struct fiemap *)realloc(fiemap, sizeof(struct fiemap) +
size);
- if (!fiemap) {
+ if (!_realloc_fiemap) {
ret = -ENOMEM;
goto done_err;
+ } else {
+ fiemap = _realloc_fiemap;
}
memset(fiemap->fm_extents, 0, size);