From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48681) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YXQRw-0007uw-4F for qemu-devel@nongnu.org; Mon, 16 Mar 2015 04:32:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YXQRr-0007Y5-2j for qemu-devel@nongnu.org; Mon, 16 Mar 2015 04:32:36 -0400 Received: from e28smtp05.in.ibm.com ([122.248.162.5]:54563) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YXQRq-0007XV-6j for qemu-devel@nongnu.org; Mon, 16 Mar 2015 04:32:30 -0400 Received: from /spool/local by e28smtp05.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 16 Mar 2015 14:02:24 +0530 Received: from d28relay01.in.ibm.com (d28relay01.in.ibm.com [9.184.220.58]) by d28dlp02.in.ibm.com (Postfix) with ESMTP id D83F33940057 for ; Mon, 16 Mar 2015 14:02:22 +0530 (IST) Received: from d28av01.in.ibm.com (d28av01.in.ibm.com [9.184.220.63]) by d28relay01.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t2G8WLa437093584 for ; Mon, 16 Mar 2015 14:02:22 +0530 Received: from d28av01.in.ibm.com (localhost [127.0.0.1]) by d28av01.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t2G8WLkV022175 for ; Mon, 16 Mar 2015 14:02:21 +0530 From: "Aneesh Kumar K.V" In-Reply-To: <1426329918-4846-1-git-send-email-sw@weilnetz.de> References: <1426329918-4846-1-git-send-email-sw@weilnetz.de> Date: Mon, 16 Mar 2015 14:02:21 +0530 Message-ID: <87bnjtmjfu.fsf@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v2] virtio: Fix memory leaks reported by Coverity List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Weil , QEMU Developer Cc: "Michael S. Tsirkin" Stefan Weil writes: > All four leaks are similar, so fix them in one patch. Ok had to spent some time to figure out which was the path that was not freeing memory. So added extra information to commit message. Success path was not doing memory free. Applied. > > Signed-off-by: Stefan Weil > --- > > v1 only fixed one of those leaks. > v2 fixes all similar leaks. > > hw/9pfs/virtio-9p-local.c | 28 ++++++++-------------------- > 1 file changed, 8 insertions(+), 20 deletions(-) > > diff --git a/hw/9pfs/virtio-9p-local.c b/hw/9pfs/virtio-9p-local.c > index d05c917..d66abcd 100644 > --- a/hw/9pfs/virtio-9p-local.c > +++ b/hw/9pfs/virtio-9p-local.c > @@ -488,7 +488,7 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path, > int err = -1; > int serrno = 0; > V9fsString fullname; > - char *buffer; > + char *buffer = NULL; > > v9fs_string_init(&fullname); > v9fs_string_sprintf(&fullname, "%s/%s", dir_path->data, name); > @@ -499,7 +499,6 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path, > buffer = rpath(fs_ctx, path); > err = mknod(buffer, SM_LOCAL_MODE_BITS|S_IFREG, 0); > if (err == -1) { > - g_free(buffer); > goto out; > } > err = local_set_xattr(buffer, credp); > @@ -512,7 +511,6 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path, > buffer = rpath(fs_ctx, path); > err = mknod(buffer, SM_LOCAL_MODE_BITS|S_IFREG, 0); > if (err == -1) { > - g_free(buffer); > goto out; > } > err = local_set_mapped_file_attr(fs_ctx, path, credp); > @@ -525,7 +523,6 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path, > buffer = rpath(fs_ctx, path); > err = mknod(buffer, credp->fc_mode, credp->fc_rdev); > if (err == -1) { > - g_free(buffer); > goto out; > } > err = local_post_create_passthrough(fs_ctx, path, credp); > @@ -539,8 +536,8 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path, > err_end: > remove(buffer); > errno = serrno; > - g_free(buffer); > out: > + g_free(buffer); > v9fs_string_free(&fullname); > return err; > } > @@ -552,7 +549,7 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path, > int err = -1; > int serrno = 0; > V9fsString fullname; > - char *buffer; > + char *buffer = NULL; > > v9fs_string_init(&fullname); > v9fs_string_sprintf(&fullname, "%s/%s", dir_path->data, name); > @@ -563,7 +560,6 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path, > buffer = rpath(fs_ctx, path); > err = mkdir(buffer, SM_LOCAL_DIR_MODE_BITS); > if (err == -1) { > - g_free(buffer); > goto out; > } > credp->fc_mode = credp->fc_mode|S_IFDIR; > @@ -576,7 +572,6 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path, > buffer = rpath(fs_ctx, path); > err = mkdir(buffer, SM_LOCAL_DIR_MODE_BITS); > if (err == -1) { > - g_free(buffer); > goto out; > } > credp->fc_mode = credp->fc_mode|S_IFDIR; > @@ -590,7 +585,6 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path, > buffer = rpath(fs_ctx, path); > err = mkdir(buffer, credp->fc_mode); > if (err == -1) { > - g_free(buffer); > goto out; > } > err = local_post_create_passthrough(fs_ctx, path, credp); > @@ -604,8 +598,8 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path, > err_end: > remove(buffer); > errno = serrno; > - g_free(buffer); > out: > + g_free(buffer); > v9fs_string_free(&fullname); > return err; > } > @@ -659,7 +653,7 @@ static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name, > int err = -1; > int serrno = 0; > V9fsString fullname; > - char *buffer; > + char *buffer = NULL; > > /* > * Mark all the open to not follow symlinks > @@ -675,7 +669,6 @@ static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name, > buffer = rpath(fs_ctx, path); > fd = open(buffer, flags, SM_LOCAL_MODE_BITS); > if (fd == -1) { > - g_free(buffer); > err = fd; > goto out; > } > @@ -690,7 +683,6 @@ static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name, > buffer = rpath(fs_ctx, path); > fd = open(buffer, flags, SM_LOCAL_MODE_BITS); > if (fd == -1) { > - g_free(buffer); > err = fd; > goto out; > } > @@ -706,7 +698,6 @@ static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name, > buffer = rpath(fs_ctx, path); > fd = open(buffer, flags, credp->fc_mode); > if (fd == -1) { > - g_free(buffer); > err = fd; > goto out; > } > @@ -724,8 +715,8 @@ err_end: > close(fd); > remove(buffer); > errno = serrno; > - g_free(buffer); > out: > + g_free(buffer); > v9fs_string_free(&fullname); > return err; > } > @@ -738,7 +729,7 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath, > int serrno = 0; > char *newpath; > V9fsString fullname; > - char *buffer; > + char *buffer = NULL; > > v9fs_string_init(&fullname); > v9fs_string_sprintf(&fullname, "%s/%s", dir_path->data, name); > @@ -751,7 +742,6 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath, > buffer = rpath(fs_ctx, newpath); > fd = open(buffer, O_CREAT|O_EXCL|O_RDWR|O_NOFOLLOW, SM_LOCAL_MODE_BITS); > if (fd == -1) { > - g_free(buffer); > err = fd; > goto out; > } > @@ -781,7 +771,6 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath, > buffer = rpath(fs_ctx, newpath); > fd = open(buffer, O_CREAT|O_EXCL|O_RDWR|O_NOFOLLOW, SM_LOCAL_MODE_BITS); > if (fd == -1) { > - g_free(buffer); > err = fd; > goto out; > } > @@ -810,7 +799,6 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath, > buffer = rpath(fs_ctx, newpath); > err = symlink(oldpath, buffer); > if (err) { > - g_free(buffer); > goto out; > } > err = lchown(buffer, credp->fc_uid, credp->fc_gid); > @@ -831,8 +819,8 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath, > err_end: > remove(buffer); > errno = serrno; > - g_free(buffer); > out: > + g_free(buffer); > v9fs_string_free(&fullname); > return err; > } > -- > 1.7.10.4