diff options
author | Peng Fan <peng.fan@nxp.com> | 2017-05-11 17:34:14 +0800 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2017-05-18 11:24:34 +0200 |
commit | c1d1e9d677901e59f31e9c384c70883642867bc1 (patch) | |
tree | 0ea2cde02d112c55d296238db7b0aaea7f0b5980 /drivers | |
parent | 8ae5bb37fcb1608fad6c2d114ea449ee7adf3f35 (diff) | |
download | u-boot-c1d1e9d677901e59f31e9c384c70883642867bc1.tar.gz |
pinctrl: imx: fix memory leak
Each time set_state is called, a new piece memory will
be allocated for pin_data, but not freed, this will
incur memory leak.
When error, the devm API could not free memory automatically.
So need call devm_kfree when error.
Issue reported by Coverity
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Stefan Agner <stefan.agner@toradex.com>
Cc: Stefano Babic <sbabic@denx.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pinctrl/nxp/pinctrl-imx.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index f0321c4057..ebc14a31f1 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -53,6 +53,7 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) if (fdtdec_get_int_array(gd->fdt_blob, node, "fsl,pins", pin_data, size >> 2)) { dev_err(dev, "Error reading pin data.\n"); + devm_kfree(dev, pin_data); return -EINVAL; } @@ -78,6 +79,7 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) if ((mux_reg == -1) || (conf_reg == -1)) { dev_err(dev, "Error mux_reg or conf_reg\n"); + devm_kfree(dev, pin_data); return -EINVAL; } @@ -166,6 +168,8 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) } } + devm_kfree(dev, pin_data); + return 0; } |