[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 25/32] block-vvfat: fix memory/handle leaks in commit_one_file()
From: Kaifeng Zhu <kaifeng.zhu@xxxxxxxxxx> Some handles and memory in commit_one_file are going to be leaked if certain function calls failed. Signed-off-by: Kaifeng Zhu <kaifeng.zhu@xxxxxxxxxx> Coverity-IDs: 1055918 1055919 Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- block-vvfat.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/block-vvfat.c b/block-vvfat.c index 345d7be..ec3363c 100644 --- a/block-vvfat.c +++ b/block-vvfat.c @@ -2229,11 +2229,15 @@ static int commit_one_file(BDRVVVFATState* s, if (fd < 0) { fprintf(stderr, "Could not open %s... (%s, %d)\n", mapping->path, strerror(errno), errno); + qemu_free(cluster); return fd; } if (offset > 0) - if (lseek(fd, offset, SEEK_SET) != offset) + if (lseek(fd, offset, SEEK_SET) != offset) { + close(fd); + qemu_free(cluster); return -3; + } while (offset < size) { uint32_t c1; @@ -2249,11 +2253,17 @@ static int commit_one_file(BDRVVVFATState* s, ret = vvfat_read(s->bs, cluster2sector(s, c), (uint8_t*)cluster, (rest_size + 0x1ff) / 0x200); - if (ret < 0) + if (ret < 0) { + close(fd); + qemu_free(cluster); return ret; + } - if (qemu_write_ok(fd, cluster, rest_size) < 0) + if (qemu_write_ok(fd, cluster, rest_size) < 0) { + close(fd); + qemu_free(cluster); return -2; + } offset += rest_size; c = c1; @@ -2261,6 +2271,7 @@ static int commit_one_file(BDRVVVFATState* s, ftruncate(fd, size); close(fd); + qemu_free(cluster); return commit_mappings(s, first_cluster, dir_index); } -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |