mirror of https://gitee.com/openkylin/linux.git
pinctrl: at91-pio4: fix memleak after using dt map
configs is allocated by pinconf_generic_parse_dt_config(), pinctrl_utils_add_map_configs() duplicates configs so it can and has to be freed to prevent memory leaks. Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> Reported-by: Yingjoe Chen <yingjoe.chen@mediatek.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
df8801a073
commit
e43d2b7529
|
@ -500,7 +500,8 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
|||
if (!num_pins) {
|
||||
dev_err(pctldev->dev, "no pins found in node %s\n",
|
||||
of_node_full_name(np));
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -514,19 +515,19 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
|||
ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps, num_maps,
|
||||
reserve);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto exit;
|
||||
|
||||
for (i = 0; i < num_pins; i++) {
|
||||
const char *group, *func;
|
||||
|
||||
ret = of_property_read_u32_index(np, "pinmux", i, &pinfunc);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto exit;
|
||||
|
||||
ret = atmel_pctl_xlate_pinfunc(pctldev, np, pinfunc, &group,
|
||||
&func);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto exit;
|
||||
|
||||
pinctrl_utils_add_map_mux(pctldev, map, reserved_maps, num_maps,
|
||||
group, func);
|
||||
|
@ -537,11 +538,13 @@ static int atmel_pctl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
|||
configs, num_configs,
|
||||
PIN_MAP_TYPE_CONFIGS_GROUP);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
exit:
|
||||
kfree(configs);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int atmel_pctl_dt_node_to_map(struct pinctrl_dev *pctldev,
|
||||
|
|
Loading…
Reference in New Issue