Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965880AbcJFJ3e (ORCPT ); Thu, 6 Oct 2016 05:29:34 -0400 Received: from mout.web.de ([212.227.17.12]:50164 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964918AbcJFJ3b (ORCPT ); Thu, 6 Oct 2016 05:29:31 -0400 Subject: [PATCH 29/54] md/raid5: Return directly after a failed kcalloc() in alloc_thread_groups() To: linux-raid@vger.kernel.org, Christoph Hellwig , Guoqing Jiang , Jens Axboe , Mike Christie , Neil Brown , Shaohua Li , Tomasz Majchrzak References: <566ABCD9.1060404@users.sourceforge.net> <786843ef-4b6f-eb04-7326-2f6f5b408826@users.sourceforge.net> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring Message-ID: <5130f28f-7b24-54bd-a90d-37f305cca1be@users.sourceforge.net> Date: Thu, 6 Oct 2016 11:29:09 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <786843ef-4b6f-eb04-7326-2f6f5b408826@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:pEJ8VjWzuf7zytIbTHvnRw8ooKCTqq/x/lft2fyr3vcKO4YVbxM 40sbOuljaiD3hUjnE2V9Bqwa29cpNbdnrLuDsVgUoHkGi30ZN0bY6yD1A/x1hM/xHkyGdAa AAz9IatIwpJ+9HwSZ4uXKXoD5GQcrVPXAWsiSBB/kSEtZxR3uXYjG5rNkNMOzoTSUOCaLA7 mWv66vqQ5YGB99xjCSimg== X-UI-Out-Filterresults: notjunk:1;V01:K0:zBuwgS6sZrY=:23NYgjBBRVm7VfJAJTLNFv +bwZL5rFiYJ+0znyjV9zgJINMSP6VNHLKdB6OYmVmw7J4Z7aUYM9YIMInHQSY6a0EvjhiAXk5 btoxvPXra/CZDcPqDIQtu2Xhr1c+JqGatw4E2iVUAHb+Bi2kbviji9tSCleecyInKDeRhspqz c7/OqjSFTWzvlNgqk5B61ZqUJYMbSKsaJcugWYH5vKn4qaYDoSkZe5zvx4iQNRU+OlBlvgWvR ax8a2uGeosWj/oagaoeh2Sp1w8JjboWBc7lXChzpNIebZNlthnXMhsq1QYcZz+qne7wwTUTzD IpATTbtG58omO7J++NZ6Qb4B7J/KJUsFkHpVMCdeq/xufGCRtF/6YclRkpj+fAD9heQxgeSr2 yj5pgQ7SAME+pKcWS/AmOttDO8zQT58MX4Q6OqhccwVaUV2KqTrohFW43FSd1J7NY1YE6U48A SxT9Y8AgSV/cDLWyU9LcD7VFk9+Dn4LThbnNVhqJqlRwDyKX/UuzEArZy6qs2tZ/m4fQqBk5U hBP1dq1D68z/szlKIuhakReiYApZhFSWRKPO21PsOcTfc39g+0RuXXoATF6Kq5JqXs6rRX8R6 fpAcEYgnXQ5+Quq2HXKV59lzzBqZtFX2lXEOmEb0Er7/E7ayFrSSCZQzRDPCUTfFoTn1oHvPy 9vP4XYZiKY9z2u5rWqEX82BOvTahhpl778pHL7ffncvGfXnYW2RfmjBTIpoLIdtlqtn77n7u8 6vV1h6cpDpCkg1Gv1SH+PcOgN0C7SguEk4v7KIi2V54nqVbtmFRb3pQ3NPmx+OF5gOlnnTPCN FZkkGxm Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1132 Lines: 38 From: Markus Elfring Date: Wed, 5 Oct 2016 08:54:40 +0200 The kfree() function was called in up to two cases by the alloc_thread_groups() function during error handling even if the passed variable contained a null pointer. * Return directly after a call of the kcalloc() function failed at the beginning. * Simplify a condition check for memory allocation failures. Signed-off-by: Markus Elfring --- drivers/md/raid5.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index b624ba6..d864871 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -6265,10 +6265,12 @@ static int alloc_thread_groups(struct r5conf *conf, int cnt, } *group_cnt = num_possible_nodes(); workers = kcalloc(cnt * *group_cnt, sizeof(*workers), GFP_NOIO); + if (!workers) + return -ENOMEM; + *worker_groups = kcalloc(*group_cnt, sizeof(**worker_groups), GFP_NOIO); - if (!*worker_groups || !workers) { + if (!*worker_groups) { kfree(workers); - kfree(*worker_groups); return -ENOMEM; } -- 2.10.1