Message ID | 1475237653-15164-1-git-send-email-jthumshirn@suse.de |
---|---|
State | New |
Headers | show |
On Fri, Sep 30, 2016 at 2:14 PM, Johannes Thumshirn <jthumshirn@suse.de> wrote: > If krealloc() fails there's no way of freeing the memory previously allocated > for pctl->functions as it is overwritten by krealloc()'s return value. Fix > this by assigning the return value to a temporary variable first so we can do > error handling (which we didn't do at all before). > > Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Patch applied. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c index 54455af..57dd09b 100644 --- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c +++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c @@ -787,6 +787,7 @@ static int sunxi_pinctrl_add_function(struct sunxi_pinctrl *pctl, static int sunxi_pinctrl_build_state(struct platform_device *pdev) { struct sunxi_pinctrl *pctl = platform_get_drvdata(pdev); + struct sunxi_pinctrl_function *functions; int i; pctl->ngroups = pctl->desc->npins; @@ -833,9 +834,14 @@ static int sunxi_pinctrl_build_state(struct platform_device *pdev) } } - pctl->functions = krealloc(pctl->functions, - pctl->nfunctions * sizeof(*pctl->functions), - GFP_KERNEL); + functions = krealloc(pctl->functions, + pctl->nfunctions * sizeof(*pctl->functions), + GFP_KERNEL); + if (!functions) { + kfree(pctl->functions); + return -ENOMEM; + } + pctl->functions = functions; for (i = 0; i < pctl->desc->npins; i++) { const struct sunxi_desc_pin *pin = pctl->desc->pins + i;
If krealloc() fails there's no way of freeing the memory previously allocated for pctl->functions as it is overwritten by krealloc()'s return value. Fix this by assigning the return value to a temporary variable first so we can do error handling (which we didn't do at all before). Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> --- drivers/pinctrl/sunxi/pinctrl-sunxi.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)