Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp514989img; Wed, 20 Mar 2019 05:33:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqyN58vSQzQY8QZWJH/Xz/t9MVdNhaAwgpMXousiHl3DHJYV9uylCPNdzshD+uv5wBteTfsa X-Received: by 2002:a17:902:1123:: with SMTP id d32mr7572505pla.16.1553085218168; Wed, 20 Mar 2019 05:33:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553085218; cv=none; d=google.com; s=arc-20160816; b=rxQdpeLnIYgqHLHAiLtF1mkZfE3Of+TThOVReZyifnyYDi898o2M2IVC8ASxS0Ls+h e87a5wpp4pR4fua/eGe7ATsrLnCpryjrPvQuhzGlOECTJn7zsQfo35KHlH2At+krWsWY mMhOsPsN2etIp2d7jdAFM36/s0uz6TiTXFQ3Z5meD16mVapWw7IeOHqLQUJ5NfazEtZZ Y1cCAkrPLaTrSFVL4D/G8UbHYnzIg8UDuoyCyIMPEhHFkLnV/FDj3xG6udeEg9U3RzUg +gJZ+SDt+tggoQfkLwUxhQe+/w4GJimkPwBLfuiqUwkxaS+or5sVRaQO6Kk8+Fcvdewm mrcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=rwGiDiuhr/KOajjyb7MAOEgedCrcKJQuXgXaI3ep4o8=; b=kk8Hu+KY9sNHtfWwDh8PM4yl7lS7Pw25zXyNHSPQQvjxQkWMQyVYGRZwBx6BrvGZBW 3BLOlnKC5bk5JErX+DgTCRDIdQFM/5zut+2KIRnqGuFoKShR3jIXHkKGpyDCfmvYsn7K pe3dautySdW9FL7++t/N6+3hXx2msnSz+lGqffaJvMgDyux/4huXpIEwHwkYLgpsi8+V sXa4dWQm1CH8lG8gybi5fPlkvzhvydKyT/Rzgk7NqWBprZ9cU03HM/Vqn4HOlmp2/Jq3 XsG/SbggQ4aayfJX4B7Tb+8kXv+BaE679Q+AVObm7Cm2n0FkYI2udk0RwctLrMeQFrcO LfMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v61si1869287plb.60.2019.03.20.05.33.22; Wed, 20 Mar 2019 05:33:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727620AbfCTMcm (ORCPT + 99 others); Wed, 20 Mar 2019 08:32:42 -0400 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:51813 "EHLO relay2-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727521AbfCTMcm (ORCPT ); Wed, 20 Mar 2019 08:32:42 -0400 X-Originating-IP: 182.72.246.220 Received: from localhost (unknown [182.72.246.220]) (Authenticated sender: alexandre.belloni@bootlin.com) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id C71AB4000F; Wed, 20 Mar 2019 12:32:39 +0000 (UTC) From: Alexandre Belloni To: linux-rtc@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexandre Belloni Subject: [PATCH 1/7] rtc: xgene: fix possible race condition Date: Wed, 20 Mar 2019 13:32:27 +0100 Message-Id: <20190320123233.13519-1-alexandre.belloni@bootlin.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- drivers/rtc/rtc-xgene.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/rtc/rtc-xgene.c b/drivers/rtc/rtc-xgene.c index 153820876a82..2f741f455c30 100644 --- a/drivers/rtc/rtc-xgene.c +++ b/drivers/rtc/rtc-xgene.c @@ -168,6 +168,10 @@ static int xgene_rtc_probe(struct platform_device *pdev) if (IS_ERR(pdata->csr_base)) return PTR_ERR(pdata->csr_base); + pdata->rtc = devm_rtc_allocate_device(&pdev->dev); + if (IS_ERR(pdata->rtc)) + return PTR_ERR(pdata->rtc); + irq = platform_get_irq(pdev, 0); if (irq < 0) { dev_err(&pdev->dev, "No IRQ resource\n"); @@ -198,15 +202,15 @@ static int xgene_rtc_probe(struct platform_device *pdev) return ret; } - pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, - &xgene_rtc_ops, THIS_MODULE); - if (IS_ERR(pdata->rtc)) { - clk_disable_unprepare(pdata->clk); - return PTR_ERR(pdata->rtc); - } - /* HW does not support update faster than 1 seconds */ pdata->rtc->uie_unsupported = 1; + pdata->rtc->ops = &xgene_rtc_ops; + + ret = rtc_register_device(pdata->rtc); + if (ret) { + clk_disable_unprepare(pdata->clk); + return ret; + } return 0; } -- 2.20.1