From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932432AbcGZTEw (ORCPT ); Tue, 26 Jul 2016 15:04:52 -0400 Received: from mout.web.de ([212.227.15.14]:62227 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932258AbcGZTEu (ORCPT ); Tue, 26 Jul 2016 15:04:50 -0400 Subject: [PATCH 04/12] staging: lustre: Split a condition check in class_register_type() To: devel@driverdev.osuosl.org, lustre-devel@lists.lustre.org, Andreas Dilger , Greg Kroah-Hartman , Oleg Drokin References: <566ABCD9.1060404@users.sourceforge.net> <566D7733.1030102@users.sourceforge.net> <56784D83.7080108@users.sourceforge.net> <56784F0C.6040007@users.sourceforge.net> <20151221234857.GA27079@kroah.com> <59d94e70-7476-728e-5f63-013557ec2db9@users.sourceforge.net> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall , Bhumika Goyal From: SF Markus Elfring Message-ID: Date: Tue, 26 Jul 2016 21:04:34 +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: <59d94e70-7476-728e-5f63-013557ec2db9@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:PCvBSTSHH8tvbYLQfL9t4kqVK+kOe8ux2nvn+RcyvIpC6/R9Ro3 ZvGOxtge1+/KMqodYpmyFG+9XH3Xq1KwIJ41RBS+AXokF63q63qxmTOKYR99pndTvgkplpB bktL19i/yghQp6UvPtNcgZdQ9xjhYvciB/F1C4yeCQbRD4bUIRwJ2brFhn1YaW78iuWS4Az mqecPktKjrdVc8ELrxtFw== X-UI-Out-Filterresults: notjunk:1;V01:K0:msnYXr1wzqE=:oY+S3fE29yJO5JYZf3mZIJ +vgWJNZpSSiaFB6PWlWGUT/hTvBcv0OFFtUeUZ3MwUCestM6FFgtJHWjgMZRnj1Qy37Uvkkai Z2auEd+LidcnLVmeAW4DGSfXuydKDG88G8QZZ3JGZvGxy97LAQJHaNT89DWju4OLDYC5szG+f MqWn57ZrnW+2DN/1Qiya0I8XkPNqc/Y4qicyd/HGunMbE5gIkSEuGCMX1PneXBYfBimTz2me3 qO/EpR+y7rUKgECXkYgmGfSDvmhK/mzH4Pn6Gp6ZBSCWU2fH+cXW/UVWXLPmBAZa5aI7V9xYe 3nUOuvB5mDiyJvco1TlQ940oQ25K9RGbbvlbPBINVBnNCcEI8Zzyghe884lP3zv8TKnUQw/m7 UJDn7qHVWR7q2xXQK6JNKYofXWMFjAnDAl8pSlesDGSeH90nQdfyT9nYPSlhtcS5XMVoS3EyH EKU3HINdE/T/PxxuZFGux3LcytiRRi1bTMxD7Cf6UOtelyNwceAhY/jRlZEbIFyZp984ZNHKZ TzmriQsZmF1AXlFSkRYLNMeEAivW8sRMBE6SheCcywPm6Trl9FalqRG8eSgsT4SV9mNmtLqtW sbdZUV31sph75KFT7NaV/FVEd0dQHi++nMQ+hBfrwW4WmiR6N5BunKSgx5aDKtW3LzIOGytmv 69qS5L0dqRY25L6vQkbKN+wJWlLLSgrug5Hqk9IoLpnAJZLZvi/Zxi2NzSbvDrdRu+E3KU6hD +5S1c4WKFWHwmMJOW2GEOUu6SOYc+4Zjtq4BG5ZXjLc1+T9dAbwTVa9qRyvLmAOxUzaobT0Wr l/PrX2h Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Tue, 26 Jul 2016 14:10:55 +0200 The kfree() function was called in up to three cases by the class_register_type() function during error handling even if the passed data structure element contained a null pointer. * Split a condition check for memory allocation failures. * Improve this implementation detail by the introduction of a few jump labels. Signed-off-by: Markus Elfring --- drivers/staging/lustre/lustre/obdclass/genops.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index 10dd145..fd5e61f 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -158,13 +158,22 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops, return rc; type->typ_dt_ops = kzalloc(sizeof(*type->typ_dt_ops), GFP_NOFS); + if (!type->typ_dt_ops) { + rc = -ENOMEM; + goto free_type; + } + type->typ_md_ops = kzalloc(sizeof(*type->typ_md_ops), GFP_NOFS); - type->typ_name = kzalloc(strlen(name) + 1, GFP_NOFS); + if (!type->typ_dt_ops) { + rc = -ENOMEM; + goto free_dt_ops; + } - if (!type->typ_dt_ops || - !type->typ_md_ops || - !type->typ_name) - goto free_name; + type->typ_name = kzalloc(strlen(name) + 1, GFP_NOFS); + if (!type->typ_name) { + rc = -ENOMEM; + goto free_md_ops; + } *(type->typ_dt_ops) = *dt_ops; /* md_ops is optional */ @@ -205,8 +214,11 @@ put_object: kobject_put(type->typ_kobj); free_name: kfree(type->typ_name); +free_md_ops: kfree(type->typ_md_ops); +free_dt_ops: kfree(type->typ_dt_ops); +free_type: kfree(type); return rc; } -- 2.9.2