From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=41785 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ObI8b-0007Wi-HE for qemu-devel@nongnu.org; Tue, 20 Jul 2010 15:05:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1ObI8Z-00051I-4d for qemu-devel@nongnu.org; Tue, 20 Jul 2010 15:05:57 -0400 Received: from e35.co.us.ibm.com ([32.97.110.153]:41495) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1ObI8Y-0004eu-Un for qemu-devel@nongnu.org; Tue, 20 Jul 2010 15:05:55 -0400 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e35.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id o6KIuDnv026169 for ; Tue, 20 Jul 2010 12:56:13 -0600 Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o6KJ4L9n101730 for ; Tue, 20 Jul 2010 13:04:21 -0600 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o6KJ4LSr032551 for ; Tue, 20 Jul 2010 13:04:21 -0600 From: Joel Schopp Date: Tue, 20 Jul 2010 14:04:17 -0500 Message-Id: <1279652657-6466-1-git-send-email-jschopp@austin.ibm.com> Subject: [Qemu-devel] [PATCH] Fix a few memory leaks from early returns List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Joel Schopp This is a simple cleanup patch that catches a few places where a function returns early but doesn't free recently malloced memory, resulting in a memory leak. Signed-off-by: Joel Schopp --- linux-user/elfload.c | 8 ++++++-- qemu-io.c | 8 ++++++-- qemu-sockets.c | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index accb44d..916b733 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1408,12 +1408,16 @@ static void load_symbols(struct elfhdr *hdr, int fd) if (!syms) return; s->disas_strtab = strings = malloc(strtab.sh_size); - if (!s->disas_strtab) + if (!s->disas_strtab) { + free(syms); return; + } lseek(fd, symtab.sh_offset, SEEK_SET); - if (read(fd, syms, symtab.sh_size) != symtab.sh_size) + if (read(fd, syms, symtab.sh_size) != symtab.sh_size) { + free(syms); return; + } nsyms = symtab.sh_size / sizeof(struct elf_sym); diff --git a/qemu-io.c b/qemu-io.c index 7c6120b..9adda4c 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -1131,8 +1131,10 @@ aio_read_f(int argc, char **argv) case 'P': ctx->Pflag = 1; ctx->pattern = parse_pattern(optarg); - if (ctx->pattern < 0) + if (ctx->pattern < 0) { + free(ctx); return 0; + } break; case 'q': ctx->qflag = 1; @@ -1232,8 +1234,10 @@ aio_write_f(int argc, char **argv) break; case 'P': pattern = parse_pattern(optarg); - if (pattern < 0) + if (pattern < 0) { + free(ctx); return 0; + } break; default: free(ctx); diff --git a/qemu-sockets.c b/qemu-sockets.c index c526324..4d2bd3c 100644 --- a/qemu-sockets.c +++ b/qemu-sockets.c @@ -344,6 +344,7 @@ int inet_dgram_opts(QemuOpts *opts) if (0 != (rc = getaddrinfo(addr, port, &ai, &local))) { fprintf(stderr,"getaddrinfo(%s,%s): %s\n", addr, port, gai_strerror(rc)); + freeaddrinfo(peer); return -1; } if (sockets_debug) { -- 1.7.0.4