Commit b2132afe authored by Lu Hongfei's avatar Lu Hongfei Committed by Linus Walleij
Browse files

pinctrl: nxp: Fix resource leaks in for_each_child_of_node() loops



Ensure child node references are decremented properly in the error path.

Signed-off-by: default avatarLu Hongfei <luhongfei@vivo.com>
Link: https://lore.kernel.org/r/20230606070201.14249-1-luhongfei@vivo.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent e3275a89
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -279,9 +279,11 @@ static int s32_dt_node_to_map(struct pinctrl_dev *pctldev,
		ret = s32_dt_group_node_to_map(pctldev, np, map,
					       &reserved_maps, num_maps,
					       np_config->name);
		if (ret < 0)
		if (ret < 0) {
			of_node_put(np);
			break;
		}
	}

	if (ret)
		pinctrl_utils_free_map(pctldev, *map, *num_maps);
@@ -812,8 +814,10 @@ static int s32_pinctrl_parse_functions(struct device_node *np,
		groups[i] = child->name;
		grp = &info->groups[info->grp_index++];
		ret = s32_pinctrl_parse_groups(child, grp, info);
		if (ret)
		if (ret) {
			of_node_put(child);
			return ret;
		}
		i++;
	}

@@ -896,9 +900,11 @@ static int s32_pinctrl_probe_dt(struct platform_device *pdev,
	i = 0;
	for_each_child_of_node(np, child) {
		ret = s32_pinctrl_parse_functions(child, info, i++);
		if (ret)
		if (ret) {
			of_node_put(child);
			return ret;
		}
	}

	return 0;
}