From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755697AbYIAMMq (ORCPT ); Mon, 1 Sep 2008 08:12:46 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751808AbYIAMMg (ORCPT ); Mon, 1 Sep 2008 08:12:36 -0400 Received: from cantor2.suse.de ([195.135.220.15]:34635 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750761AbYIAMMf (ORCPT ); Mon, 1 Sep 2008 08:12:35 -0400 Date: Mon, 01 Sep 2008 14:12:34 +0200 Message-ID: From: Takashi Iwai To: Julien Brunel Cc: perex@perex.cz, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: Re: [PATCH] sound/arm: Bad NULL test In-Reply-To: <200809011059.54939.brunel@diku.dk> References: <200809011059.54939.brunel@diku.dk> User-Agent: Wanderlust/2.12.0 (Your Wildest Dreams) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (=?ISO-8859-4?Q?Sanj=F2?=) APEL/10.6 Emacs/22.2 (x86_64-suse-linux-gnu) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Mon, 1 Sep 2008 10:59:54 +0200, Julien Brunel wrote: > > From: Julien Brunel > > In case of error, the function aaci_init_card returns an ERR pointer, > but never returns a NULL pointer. We have noticed a bad NULL test, > which comes after a call to this function. Rather than doing an IS_ERR > test, we suggest to duplicate the label out: one label for the case where > aaci_init_card returns a valid pointer, and another for the case where > aaci_init_card returns an ERR pointer. > > The semantic match that finds this problem is as follows: > (http://www.emn.fr/x-info/coccinelle/) > > // > @match_bad_null_test@ > expression x, E; > statement S1,S2; > @@ > x = aaci_init_card(...) > ... when != x = E > * if (x != NULL) > S1 else S2 > // > > Signed-off-by: Julien Brunel > Signed-off-by: Julia Lawall The fix below is simpler. Could you check whether it's OK? thanks, Takashi diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index b0a4744..e46b7cb 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c @@ -1085,6 +1085,7 @@ static int __devinit aaci_probe(struct amba_device *dev, void *id) aaci = aaci_init_card(dev); if (IS_ERR(aaci)) { ret = PTR_ERR(aaci); + aaci = NULL; goto out; }