FAILED: patch "[PATCH] pinctrl: samsung: Fix device node refcount leaks in Exynos" failed to apply to 4.4-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 5c7f48dd14e892e3e920dd6bbbd52df79e1b3b41 Mon Sep 17 00:00:00 2001
From: Krzysztof Kozlowski <[email protected]>
Date: Mon, 5 Aug 2019 18:27:07 +0200
Subject: [PATCH] pinctrl: samsung: Fix device node refcount leaks in Exynos
wakeup controller init
In exynos_eint_wkup_init() the for_each_child_of_node() loop is used with a break to find a matching child node. Although each iteration of for_each_child_of_node puts the previous node, but early exit from loop misses it. This leads to leak of device node.
drivers/pinctrl/samsung/pinctrl-exynos.c +8 -2
@@ -506,6 +506,7 @@ int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d) bank->nr_pins, &exynos_eint_irqd_ops, bank);if (!bank->irq_domain) {dev_err (dev,"wkup irq domain add failed\n" ); +of_node_put (wkup_np);return -ENXIO ; }
@@ -520,8 +521,10 @@ int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d) weint_data =devm_kcalloc (dev, bank->nr_pins,sizeof (*weint_data),GFP_KERNEL ); -if (!weint_data) +if (!weint_data) { +of_node_put (wkup_np);return -ENOMEM ; + }for (idx =0 ; idx < bank->nr_pins; ++idx) { irq =irq_of_parse_and_map (bank->of_node, idx);
@@ -538,10 +541,13 @@ int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d) } } -if (!muxed_banks) +if (!muxed_banks) { +of_node_put (wkup_np);return 0 ; + } irq =irq_of_parse_and_map (wkup_np,0 ); +of_node_put (wkup_np);if (!irq) {dev_err (dev,"irq number for muxed EINTs not found\n" );return 0 ;