From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A978CC04AA6 for ; Tue, 30 Apr 2019 11:25:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 830B0217D7 for ; Tue, 30 Apr 2019 11:25:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727376AbfD3LZs (ORCPT ); Tue, 30 Apr 2019 07:25:48 -0400 Received: from guitar.tcltek.co.il ([192.115.133.116]:58371 "EHLO mx.tkos.co.il" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726129AbfD3LZr (ORCPT ); Tue, 30 Apr 2019 07:25:47 -0400 Received: from tarshish (unknown [10.0.8.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx.tkos.co.il (Postfix) with ESMTPS id C72FE44028D; Tue, 30 Apr 2019 14:25:43 +0300 (IDT) References: <20190430093212.28425-1-alexandre.belloni@bootlin.com> User-agent: mu4e 1.0; emacs 26.1 From: Baruch Siach To: Alexandre Belloni Cc: linux-rtc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/4] rtc: digicolor: fix possible race condition In-reply-to: <20190430093212.28425-1-alexandre.belloni@bootlin.com> Date: Tue, 30 Apr 2019 14:25:43 +0300 Message-ID: <878svru43s.fsf@tarshish> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Alexandre, On Tue, Apr 30 2019, Alexandre Belloni wrote: > The IRQ is requested before the struct rtc is allocated and registered, but > this struct is used in the IRQ handler. This may lead to a NULL pointer > dereference. > > Switch to devm_rtc_allocate_device/rtc_register_device to allocate the rtc > struct before requesting the IRQ. > > Signed-off-by: Alexandre Belloni Acked-by: Baruch Siach baruch > --- > drivers/rtc/rtc-digicolor.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/rtc/rtc-digicolor.c b/drivers/rtc/rtc-digicolor.c > index b253bf1b3531..5bb14c56bc9a 100644 > --- a/drivers/rtc/rtc-digicolor.c > +++ b/drivers/rtc/rtc-digicolor.c > @@ -192,6 +192,10 @@ static int __init dc_rtc_probe(struct platform_device *pdev) > if (IS_ERR(rtc->regs)) > return PTR_ERR(rtc->regs); > > + rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev); > + if (IS_ERR(rtc->rtc_dev)) > + return PTR_ERR(rtc->rtc_dev); > + > irq = platform_get_irq(pdev, 0); > if (irq < 0) > return irq; > @@ -200,12 +204,10 @@ static int __init dc_rtc_probe(struct platform_device *pdev) > return ret; > > platform_set_drvdata(pdev, rtc); > - rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name, > - &dc_rtc_ops, THIS_MODULE); > - if (IS_ERR(rtc->rtc_dev)) > - return PTR_ERR(rtc->rtc_dev); > > - return 0; > + rtc->rtc_dev->ops = &dc_rtc_ops; > + > + return rtc_register_device(rtc->rtc_dev); > } > > static const struct of_device_id dc_dt_ids[] = { -- http://baruch.siach.name/blog/ ~. .~ Tk Open Systems =}------------------------------------------------ooO--U--Ooo------------{= - baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -