From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756132AbbBCR3A (ORCPT ); Tue, 3 Feb 2015 12:29:00 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:51926 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751686AbbBCR25 (ORCPT ); Tue, 3 Feb 2015 12:28:57 -0500 X-AuditID: cbfec7f5-b7fc86d0000066b7-f0-54d104c5a123 From: Krzysztof Kozlowski To: Russell King , Kukjin Kim , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Kyungmin Park , Bartlomiej Zolnierkiewicz , Marek Szyprowski , Krzysztof Kozlowski Subject: [PATCH] ARM: EXYNOS: Handle of_find_device_by_node and kstrdup failures Date: Tue, 03 Feb 2015 18:28:49 +0100 Message-id: <1422984529-17729-1-git-send-email-k.kozlowski@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrGJMWRmVeSWpSXmKPExsVy+t/xy7pHWS6GGExcw2KxccZ6VovXLwwt +h+/ZrY42/SG3WLT42usFpd3zWGzmHF+H5PF7cu8FmuP3GV34PRoae5h89i0qpPNY/OSeo++ LasYPT5vkgtgjeKySUnNySxLLdK3S+DK+LJiH0vBD66K43/6WBoY33J0MXJySAiYSGzZfIIF whaTuHBvPVsXIxeHkMBSRokdXd1MIAkhgT4mibnr00FsNgFjic3Ll4AViQhsZpTob9zNCuIw CxxllLgx6y5Yh7BAgMSJm1MYQWwWAVWJO292gtm8Au4Sc6ZcZoRYJydx8thk1gmM3AsYGVYx iqaWJhcUJ6XnGukVJ+YWl+al6yXn525ihITN1x2MS49ZHWIU4GBU4uHVeHchRIg1say4MvcQ owQHs5II757fQCHelMTKqtSi/Pii0pzU4kOMTBycUg2MkzP85/P8ijpWdPJk/yEXG/XVypPT fjfnb+24X66i2RX7k0klr9dV8IPvrdduFefZJOMkDplt/TA9i8U0ftHvE79iN8/5ald12abo lJrjLYfIAwKFCUWcT3Jt19jytfktP2O/au7Vv21KX6471D277/ttc9GWa09Yzwbf62S4pDR9 w9+ei8sWKLEUZyQaajEXFScCAO6nlT75AQAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Prevent possible NULL pointer dereference of pointer returned by of_find_device_by_node(). Handle this by skipping such power domain. Additionally fail the init on kstrdup() failure. Such case is actually not fatal because the name for power domain allocated by kstrdup() is used only in printk. Still as a precaution handle this as an error condition. Signed-off-by: Krzysztof Kozlowski --- arch/arm/mach-exynos/pm_domains.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c index fd7640a6b503..4c6c29ba58ef 100644 --- a/arch/arm/mach-exynos/pm_domains.c +++ b/arch/arm/mach-exynos/pm_domains.c @@ -116,6 +116,12 @@ static __init int exynos4_pm_init_power_domain(void) struct device *dev; pdev = of_find_device_by_node(np); + if (!pdev) { + pr_err("%s: failed to find device for node %s\n", + __func__, np->name); + of_node_put(np); + continue; + } dev = &pdev->dev; pd = kzalloc(sizeof(*pd), GFP_KERNEL); @@ -126,6 +132,12 @@ static __init int exynos4_pm_init_power_domain(void) } pd->pd.name = kstrdup(np->name, GFP_KERNEL); + if (!pd->pd.name) { + kfree(pd); + of_node_put(np); + return -ENOMEM; + } + pd->name = pd->pd.name; pd->base = of_iomap(np, 0); if (!pd->base) { -- 1.9.1