From patchwork Sun Aug 28 17:14:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SF Markus Elfring X-Patchwork-Id: 663390 X-Patchwork-Delegate: scottwood@freescale.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3sMhJS3MRmz9sBR for ; Mon, 29 Aug 2016 03:16:08 +1000 (AEST) Received: from ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3sMhJS2Vt8zDrfv for ; Mon, 29 Aug 2016 03:16:08 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from mout.web.de (mout.web.de [212.227.17.11]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3sMhH82b3TzDrfT for ; Mon, 29 Aug 2016 03:15:00 +1000 (AEST) Received: from [192.168.1.3] ([77.181.152.74]) by smtp.web.de (mrweb101) with ESMTPSA (Nemesis) id 0Lkh7Q-1b66Ls17Yq-00aTP5; Sun, 28 Aug 2016 19:14:08 +0200 Subject: [PATCH 2/6] KVM: PPC: e500: Less function calls in kvm_vcpu_ioctl_config_tlb() after error detection To: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Alexander Graf , Benjamin Herrenschmidt , Michael Ellerman , Paolo Bonzini , Paul Mackerras , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <566ABCD9.1060404@users.sourceforge.net> From: SF Markus Elfring Message-ID: Date: Sun, 28 Aug 2016 19:14:07 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2 MIME-Version: 1.0 In-Reply-To: X-Provags-ID: V03:K0:o12Ai/TrAUMcdj2RNq/i2aVkQvWFP8GakhbTw3eRDHcwBgEi1yh XcNm9JhXh000L0Kgrmf3rcjcUfZPl7KWzS6iE78TzGAJ8BAvI7TF902BWOQBn7Mqr3GmmYU h3jRN+XANM/3nGmMl+lMnCxgwefHfoC2HudOPofo9E1Azlgb/pvbkH/2F8AWOKvv2f9IQbn yv3hHnsGa2FxK2sMg83gQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:8GmVNCSphjk=:eDtu0uJ8fsOoWOQFHyQRem ZRgMxpuLLRFvaSS3ucKFMHiLkun97qEheNdOUomRKc90WPxMIbMrrMfZkIEA3mIuWezURGP5r 6ld94MD8a9GhNUYvAaO1zZBkKuYHG7TbV8LJDD3/8utWBNJEJ0RyPGpwcnMhBasKVXj8ScWs0 EGKIx9EQc/23hNJjs2vHBFd7Urshfg9ctNdcoGW58uVmGHsdkAPOIOIIIzHAKWovaatk5tJTl pRWsb532VHUzLohgE50G1QfPQnD+KZCl+V/2TIlKJXgqYnRyGFhw/QaHzQDrURWb47MZj8fcR CLRWBeyCvNhWls11G0uNC5hxSb4tLfVHr0tSK92PWNKAgQaDRXxM15vT4ofZ6GB/nEVgtNOEM iOPrnRbpUtHLjv/bE5Uve9YSAZdSOZak2TKrABIWV0LXSvKSumNJFhiOAN1cPiMYLv/OAeL3t 8ZWMOn9PC2WLMh1Ee7zrzmqQrFkCbm1YUrNv71Xqp/3GsqrA2JoL/jDsuewWUdWT2Hd3JQtFr Cv9kkRtc8AFt+RpAcH8N/n4p7z7uASqX6yMyn7YXCY7Wkvib8TiY/lXfUNqBQuFVsge+yy/XF 3kdTId4LlXGMGK8tPXzh5V1p4WRTPfjCwhc9d4fRX8kshUgs0OUikOW4O3xsK/PbpSQl+zWmV fFh65u3FFm9khcyMTP6XmNibiCz4pzJzMIovCemEjLInkgiSIeRWbf67ds9lylG1RXKa5GC+d WbfoHk9Pbz/CwECtEJQfQv25n8C6YEz6Q6Ve/Vt4yRl0iA66q7QDaVBs4+0sO2H59DjQz0Nfp 1axDLi8 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Julia Lawall , kernel-janitors@vger.kernel.org, LKML Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" From: Markus Elfring Date: Sun, 28 Aug 2016 17:34:46 +0200 The kfree() function was called in two cases by the kvm_vcpu_ioctl_config_tlb() function during error handling even if the passed data structure element contained a null pointer. * Split a condition check for memory allocation failures. * Adjust jump targets according to the Linux coding style convention. Signed-off-by: Markus Elfring --- arch/powerpc/kvm/e500_mmu.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/kvm/e500_mmu.c b/arch/powerpc/kvm/e500_mmu.c index 26f3737..b65a894 100644 --- a/arch/powerpc/kvm/e500_mmu.c +++ b/arch/powerpc/kvm/e500_mmu.c @@ -785,35 +785,39 @@ int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu, ret = get_user_pages_fast(cfg->array, num_pages, 1, pages); if (ret < 0) - goto err_pages; + goto free_pages; if (ret != num_pages) { num_pages = ret; ret = -EFAULT; - goto err_put_page; + goto put_pages; } virt = vmap(pages, num_pages, VM_MAP, PAGE_KERNEL); if (!virt) { ret = -ENOMEM; - goto err_put_page; + goto put_pages; } privs[0] = kzalloc(sizeof(struct tlbe_priv) * params.tlb_sizes[0], GFP_KERNEL); + if (!privs[0]) { + ret = -ENOMEM; + goto put_pages; + } + privs[1] = kzalloc(sizeof(struct tlbe_priv) * params.tlb_sizes[1], GFP_KERNEL); - - if (!privs[0] || !privs[1]) { + if (!privs[1]) { ret = -ENOMEM; - goto err_privs; + goto free_privs_first; } g2h_bitmap = kzalloc(sizeof(u64) * params.tlb_sizes[1], GFP_KERNEL); if (!g2h_bitmap) { ret = -ENOMEM; - goto err_privs; + goto free_privs_second; } free_gtlb(vcpu_e500); @@ -845,16 +849,14 @@ int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu, kvmppc_recalc_tlb1map_range(vcpu_e500); return 0; - -err_privs: - kfree(privs[0]); + free_privs_second: kfree(privs[1]); - -err_put_page: + free_privs_first: + kfree(privs[0]); + put_pages: for (i = 0; i < num_pages; i++) put_page(pages[i]); - -err_pages: + free_pages: kfree(pages); return ret; }