From patchwork Sat Mar 20 14:12:59 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wolfram Sang X-Patchwork-Id: 48213 Return-Path: <3qNikSwYOCXEl.hPcVeTcVjigdcXm.STgiR-aXcjmVddVaTVgdjeh.Rdb@groups.bounces.google.com> X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-yw0-f166.google.com (mail-yw0-f166.google.com [209.85.211.166]) by ozlabs.org (Postfix) with ESMTP id 10EC7B7D1F for ; Sun, 21 Mar 2010 01:16:10 +1100 (EST) Received: by ywh38 with SMTP id 38sf6958281ywh.29 for ; Sat, 20 Mar 2010 07:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:mime-version:x-beenthere:received :received:received:received:received-spf:received:from:to:cc:date :message-id:x-mailer:in-reply-to:references:x-sa-exim-connect-ip :x-sa-exim-mail-from:x-spam-checker-version:x-spam-level :x-spam-status:subject:x-sa-exim-version:x-sa-exim-scanned :x-ptx-original-recipient:x-original-authentication-results :x-original-sender:reply-to:precedence:mailing-list:list-id :list-post:list-help:list-archive:x-thread-url:x-message-url:sender :list-subscribe:list-unsubscribe:content-type; bh=l2wr/KnMm2d9ImpHL6RSvLWm4zbNsOqnSkrQjzzHC8k=; b=WYadRHJEq5ux5Arb9+njXbfwNrpnZRBByxrzCWKecimmHzJVldotpeIMjjOuqt22p/ suWNbuKxiQxC0JW3Wfpnd7dNV4/ZzlqkKCFfe91z0MFj0yhzuwxXeYcspoIjecIcPQeF DOpLGvSzYDkLu6EqRH5Nk6B5KzvfMmTpXB16Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=mime-version:x-beenthere:received-spf:from:to:cc:date:message-id :x-mailer:in-reply-to:references:x-sa-exim-connect-ip :x-sa-exim-mail-from:x-spam-checker-version:x-spam-level :x-spam-status:subject:x-sa-exim-version:x-sa-exim-scanned :x-ptx-original-recipient:x-original-authentication-results :x-original-sender:reply-to:precedence:mailing-list:list-id :list-post:list-help:list-archive:x-thread-url:x-message-url:sender :list-subscribe:list-unsubscribe:content-type; b=4UVc9zkLfhp3MUXj9KoXbMjGyF70ZYBYpjSqL/lEgJEXuYWr0ljCaAgamF2MMYFrMu ZUhjTbboDBHykdKRSQCsEnMk05dLKfnZ0gIxw6NCYqqFv1lW26VsKD8DfwEfsH1COyuD kVh4oWx1fNpqyvsIA92MWVI/Nj5KtPmWzUwPs= Received: by 10.91.119.12 with SMTP id w12mr195313agm.53.1269094568861; Sat, 20 Mar 2010 07:16:08 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.87.29.3 with SMTP id g3ls674608fgj.2.p; Sat, 20 Mar 2010 07:16:07 -0700 (PDT) Received: by 10.87.73.30 with SMTP id a30mr920121fgl.16.1269094566840; Sat, 20 Mar 2010 07:16:06 -0700 (PDT) Received: by 10.87.73.30 with SMTP id a30mr920120fgl.16.1269094566818; Sat, 20 Mar 2010 07:16:06 -0700 (PDT) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [92.198.50.35]) by gmr-mx.google.com with ESMTP id 18si279163fxm.9.2010.03.20.07.16.06; Sat, 20 Mar 2010 07:16:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of w.sang@pengutronix.de designates 92.198.50.35 as permitted sender) client-ip=92.198.50.35; Received: from themisto.ext.pengutronix.de ([92.198.50.58] helo=pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.71) (envelope-from ) id 1NszT1-0004JE-Cw; Sat, 20 Mar 2010 15:16:00 +0100 From: Wolfram Sang To: kernel-janitors@vger.kernel.org Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Wolfram Sang , Paul Gortmaker , Alessandro Zummo , rtc-linux@googlegroups.com Date: Sat, 20 Mar 2010 15:12:59 +0100 Message-Id: <1269094385-16114-19-git-send-email-w.sang@pengutronix.de> X-Mailer: git-send-email 1.7.0 In-Reply-To: <1269094385-16114-1-git-send-email-w.sang@pengutronix.de> References: <1269094385-16114-1-git-send-email-w.sang@pengutronix.de> X-SA-Exim-Connect-IP: 92.198.50.58 X-SA-Exim-Mail-From: w.sang@pengutronix.de X-Spam-Checker-Version: SpamAssassin 3.3.0 (2010-01-18) on metis.extern.pengutronix.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=4.5 tests=AWL,BAYES_00, KHOP_SC_TOP_CIDR8,T_RP_MATCHES_RCVD shortcircuit=no autolearn=ham version=3.3.0 Subject: [rtc-linux] [PATCH 18/24] rtc: fix dangling pointers X-SA-Exim-Version: 4.2.1 (built Sat, 01 Aug 2009 12:09:26 +0000) X-SA-Exim-Scanned: Yes (on metis.ext.pengutronix.de) X-PTX-Original-Recipient: rtc-linux@googlegroups.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of w.sang@pengutronix.de designates 92.198.50.35 as permitted sender) smtp.mail=w.sang@pengutronix.de X-Original-Sender: w.sang@pengutronix.de Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: List-Post: , List-Help: , List-Archive: X-Thread-Url: http://groups.google.com/group/rtc-linux/t/c38df4df8c42a849 X-Message-Url: http://groups.google.com/group/rtc-linux/msg/e155c73116cf1234 Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , Fix I2C-drivers which missed setting clientdata to NULL before freeing the structure it points to. Also fix drivers which do this _after_ the structure was freed already. Signed-off-by: Wolfram Sang Cc: Paul Gortmaker Cc: Alessandro Zummo --- Found using coccinelle, then reviewed. Full patchset is available via kernel-janitors, linux-i2c, and LKML. --- drivers/rtc/rtc-ds1307.c | 2 ++ drivers/rtc/rtc-fm3130.c | 2 ++ drivers/rtc/rtc-m41t80.c | 2 ++ drivers/rtc/rtc-pcf8563.c | 2 ++ drivers/rtc/rtc-pcf8583.c | 2 ++ drivers/rtc/rtc-rs5c372.c | 2 ++ drivers/rtc/rtc-s35390a.c | 4 ++-- 7 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index c4ec5c1..eee887c 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -900,6 +900,7 @@ read_rtc: exit_irq: rtc_device_unregister(ds1307->rtc); exit_free: + i2c_set_clientdata(client, NULL); kfree(ds1307); return err; } @@ -917,6 +918,7 @@ static int __devexit ds1307_remove(struct i2c_client *client) sysfs_remove_bin_file(&client->dev.kobj, &nvram); rtc_device_unregister(ds1307->rtc); + i2c_set_clientdata(client, NULL); kfree(ds1307); return 0; } diff --git a/drivers/rtc/rtc-fm3130.c b/drivers/rtc/rtc-fm3130.c index 812c667..6c4e90f 100644 --- a/drivers/rtc/rtc-fm3130.c +++ b/drivers/rtc/rtc-fm3130.c @@ -462,6 +462,7 @@ exit_bad: } return 0; exit_free: + i2c_set_clientdata(client, NULL); kfree(fm3130); return err; } @@ -471,6 +472,7 @@ static int __devexit fm3130_remove(struct i2c_client *client) struct fm3130 *fm3130 = i2c_get_clientdata(client); rtc_device_unregister(fm3130->rtc); + i2c_set_clientdata(client, NULL); kfree(fm3130); return 0; } diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c index 60fe266..2fd8d7c 100644 --- a/drivers/rtc/rtc-m41t80.c +++ b/drivers/rtc/rtc-m41t80.c @@ -863,6 +863,7 @@ ht_err: exit: if (rtc) rtc_device_unregister(rtc); + i2c_set_clientdata(client, NULL); kfree(clientdata); return rc; } @@ -880,6 +881,7 @@ static int m41t80_remove(struct i2c_client *client) #endif if (rtc) rtc_device_unregister(rtc); + i2c_set_clientdata(client, NULL); kfree(clientdata); return 0; diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c index 65f346b..4be76a4 100644 --- a/drivers/rtc/rtc-pcf8563.c +++ b/drivers/rtc/rtc-pcf8563.c @@ -225,6 +225,7 @@ static int pcf8563_probe(struct i2c_client *client, return 0; exit_kfree: + i2c_set_clientdata(client, NULL); kfree(pcf8563); return err; @@ -237,6 +238,7 @@ static int pcf8563_remove(struct i2c_client *client) if (pcf8563->rtc) rtc_device_unregister(pcf8563->rtc); + i2c_set_clientdata(client, NULL); kfree(pcf8563); return 0; diff --git a/drivers/rtc/rtc-pcf8583.c b/drivers/rtc/rtc-pcf8583.c index 2d201af..e122d9f 100644 --- a/drivers/rtc/rtc-pcf8583.c +++ b/drivers/rtc/rtc-pcf8583.c @@ -290,6 +290,7 @@ static int pcf8583_probe(struct i2c_client *client, return 0; exit_kfree: + i2c_set_clientdata(client, NULL); kfree(pcf8583); return err; } @@ -300,6 +301,7 @@ static int __devexit pcf8583_remove(struct i2c_client *client) if (pcf8583->rtc) rtc_device_unregister(pcf8583->rtc); + i2c_set_clientdata(client, NULL); kfree(pcf8583); return 0; } diff --git a/drivers/rtc/rtc-rs5c372.c b/drivers/rtc/rtc-rs5c372.c index 2f2c68d..75e0423 100644 --- a/drivers/rtc/rtc-rs5c372.c +++ b/drivers/rtc/rtc-rs5c372.c @@ -694,6 +694,7 @@ exit_devreg: rtc_device_unregister(rs5c372->rtc); exit_kfree: + i2c_set_clientdata(client, NULL); kfree(rs5c372); exit: @@ -706,6 +707,7 @@ static int rs5c372_remove(struct i2c_client *client) rtc_device_unregister(rs5c372->rtc); rs5c_sysfs_unregister(&client->dev); + i2c_set_clientdata(client, NULL); kfree(rs5c372); return 0; } diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index def4d39..da39041 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -274,8 +274,8 @@ exit_dummy: for (i = 1; i < 8; ++i) if (s35390a->client[i]) i2c_unregister_device(s35390a->client[i]); - kfree(s35390a); i2c_set_clientdata(client, NULL); + kfree(s35390a); exit: return err; @@ -291,8 +291,8 @@ static int s35390a_remove(struct i2c_client *client) i2c_unregister_device(s35390a->client[i]); rtc_device_unregister(s35390a->rtc); - kfree(s35390a); i2c_set_clientdata(client, NULL); + kfree(s35390a); return 0; }