From patchwork Wed Nov 9 19:22:11 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 4986 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id BB10123E0C for ; Wed, 9 Nov 2011 19:22:17 +0000 (UTC) Received: from mail-ey0-f180.google.com (mail-ey0-f180.google.com [209.85.215.180]) by fiordland.canonical.com (Postfix) with ESMTP id A2AB5A18150 for ; Wed, 9 Nov 2011 19:22:17 +0000 (UTC) Received: by eyg5 with SMTP id 5so2286153eyg.11 for ; Wed, 09 Nov 2011 11:22:17 -0800 (PST) Received: by 10.152.148.165 with SMTP id tt5mr2468715lab.23.1320866537316; Wed, 09 Nov 2011 11:22:17 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.152.10.72 with SMTP id g8cs183573lab; Wed, 9 Nov 2011 11:22:15 -0800 (PST) Received: by 10.180.106.104 with SMTP id gt8mr4479008wib.6.1320866533955; Wed, 09 Nov 2011 11:22:13 -0800 (PST) Received: from mnementh.archaic.org.uk (mnementh.archaic.org.uk. [81.2.115.146]) by mx.google.com with ESMTPS id n8si3409701wic.14.2011.11.09.11.22.13 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 09 Nov 2011 11:22:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 81.2.115.146 as permitted sender) client-ip=81.2.115.146; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of pm215@archaic.org.uk designates 81.2.115.146 as permitted sender) smtp.mail=pm215@archaic.org.uk Received: from pm215 by mnementh.archaic.org.uk with local (Exim 4.72) (envelope-from ) id 1RODit-0002aI-8H; Wed, 09 Nov 2011 19:22:11 +0000 From: Peter Maydell To: qemu-devel@nongnu.org Cc: patches@linaro.org, Riku Voipio Subject: [PATCH] linux-user/elfload.c: Don't memset(NULL..) if malloc() failed Date: Wed, 9 Nov 2011 19:22:11 +0000 Message-Id: <1320866531-9911-1-git-send-email-peter.maydell@linaro.org> X-Mailer: git-send-email 1.7.2.5 If a malloc() in copy_elf_strings() failed we would call memset() before the "did malloc fail?" check. Fix this by moving to the glib alloc/free routines for this memory so we can use g_try_malloc0 rather than having a separate memset(). Spotted by Coverity (see bug 887883). Signed-off-by: Peter Maydell --- We could obviously also fix this by just moving the memset after the null check, but I think we want to move towards consistently using the glib memory routines everywhere anyway. linux-user/elfload.c | 5 ++--- linux-user/linuxload.c | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index a413976..4635bb2 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1105,8 +1105,7 @@ static abi_ulong copy_elf_strings(int argc,char ** argv, void **page, offset = p % TARGET_PAGE_SIZE; pag = (char *)page[p/TARGET_PAGE_SIZE]; if (!pag) { - pag = (char *)malloc(TARGET_PAGE_SIZE); - memset(pag, 0, TARGET_PAGE_SIZE); + pag = g_try_malloc0(TARGET_PAGE_SIZE); page[p/TARGET_PAGE_SIZE] = pag; if (!pag) return 0; @@ -1164,7 +1163,7 @@ static abi_ulong setup_arg_pages(abi_ulong p, struct linux_binprm *bprm, info->rss++; /* FIXME - check return value of memcpy_to_target() for failure */ memcpy_to_target(stack_base, bprm->page[i], TARGET_PAGE_SIZE); - free(bprm->page[i]); + g_free(bprm->page[i]); } stack_base += TARGET_PAGE_SIZE; } diff --git a/linux-user/linuxload.c b/linux-user/linuxload.c index 62ebc7e..b47025f 100644 --- a/linux-user/linuxload.c +++ b/linux-user/linuxload.c @@ -178,7 +178,7 @@ int loader_exec(const char * filename, char ** argv, char ** envp, /* Something went wrong, return the inode and free the argument pages*/ for (i=0 ; ipage[i]); + g_free(bprm->page[i]); } return(retval); }