From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754922AbcIMMNO (ORCPT ); Tue, 13 Sep 2016 08:13:14 -0400 Received: from mout.web.de ([212.227.17.11]:51389 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751574AbcIMMNN (ORCPT ); Tue, 13 Sep 2016 08:13:13 -0400 Subject: [PATCH 2/4] virtio_blk: Less function calls in init_vq() after error detection To: virtualization@lists.linux-foundation.org, "Michael S. Tsirkin" References: <566ABCD9.1060404@users.sourceforge.net> <02054675-8395-ac81-6863-e3a5cbfc9032@users.sourceforge.net> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring Message-ID: Date: Tue, 13 Sep 2016 14:13:03 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: <02054675-8395-ac81-6863-e3a5cbfc9032@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:+6L6OKEPQhcsmQhB46WMEhYxyBW/d/5ypq4f2kyZaxJqQ4JY4eJ iOZR7fkj1BP71R6v99LvxELOQ0eRr7rGhTVIahzT7HuCwSVQh9hI2c+rUwITBx3795sSwlO Oo4GgxxSLoPecqIazUIPoNXTgRgcdlD7d/HEk0lh/TtIl67XdNADAEBfEX2e3MEeIq6TkNf IYSa26TyMIxy3Mapxjugg== X-UI-Out-Filterresults: notjunk:1;V01:K0:qwYQwHtboDU=:zUsgoFC+xteUwneW0FqZtk P29qpYGxODjH9VX5186ue7Ip+7i/84ZqGqkOqu6T9jFlN+H1L118CuaannvUbxNiyjjsSB7qc G8Lfk1WUoqOsMfrZuCz1mvXTpPJ4ivbF5M6dntTNo7jCDhaGAbEu/N/vmoXLX7+EOP6Q11ib4 JBVseJorYYDyj0gTXZ5WhNY8tR4LOFhXbfT+AgdyxVr44oHPyn3ImdLLc3pWEx4qngSgo3Jw+ 6KKOnppBTJ7109QtIGdJ+Bn7ewew2wPkXvQuyQI6LbjtEVF6oRdJmqbzijO2kqpROPq5JagYi VG1vRPedEd2/FsY3fv4Bf2+1qVFJEBILvAww93tk7n+rDSye6k07LqeXVhczxcRWl9mBkPlCt Exde6WexHrsLAYz+A1NAbIb0Kf5wjfY+b5Uz7z7SP3nZzA8zFnFPzl0+aE8AptY3B3wlFMfWs S/MKgah67RK3fUJOpI7YSkFuHANDm1DnznRmUZjLpRStsUQVYjIZQf+r1D9sqIjitwdDYS9Ek 1t9ToZrj7OsNu6AOoNCC2Q2xPcW7WEVoGxLumhJJH1PgFG4LdsMcp94b3HnF6oDFxc+r3C8XT DILWU3QBlkAs2g2qyfqJOOYTxuyNvuihP5So+DcnszUI7NdMirNjUCbszhjow6nvY5p7x+qtr jtRaaOF70nf/hGG1ajVHIGLHtNL6JpqYj1hnMBIJee75FY+saQbhjSWvEJGZIZzDWG/WR99zS glIyepRyoDiYbEW+3CEZdGhBETVlbfqcz0DiBNYDQUnl2uizutL+TG/jAz8mOEKs3DCafqLuz 2lgREnX Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Tue, 13 Sep 2016 13:20:44 +0200 The kfree() function was called in up to three cases by the init_vq() function during error handling even if the passed variable 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 --- drivers/block/virtio_blk.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 6553eb7..d28dbcf 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c @@ -395,11 +395,21 @@ static int init_vq(struct virtio_blk *vblk) return -ENOMEM; names = kmalloc_array(num_vqs, sizeof(*names), GFP_KERNEL); + if (!names) { + err = -ENOMEM; + goto free_vblk_vqs; + } + callbacks = kmalloc_array(num_vqs, sizeof(*callbacks), GFP_KERNEL); + if (!callbacks) { + err = -ENOMEM; + goto free_names; + } + vqs = kmalloc_array(num_vqs, sizeof(*vqs), GFP_KERNEL); - if (!names || !callbacks || !vqs) { + if (!vqs) { err = -ENOMEM; - goto out; + goto free_callbacks; } for (i = 0; i < num_vqs; i++) { @@ -411,19 +421,21 @@ static int init_vq(struct virtio_blk *vblk) /* Discover virtqueues and write information to configuration. */ err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names); if (err) - goto out; + goto free_vqs; for (i = 0; i < num_vqs; i++) { spin_lock_init(&vblk->vqs[i].lock); vblk->vqs[i].vq = vqs[i]; } vblk->num_vqs = num_vqs; - -out: + free_vqs: kfree(vqs); + free_callbacks: kfree(callbacks); + free_names: kfree(names); if (err) + free_vblk_vqs: kfree(vblk->vqs); return err; } -- 2.10.0