diff options
author | Richard Genoud <richard.genoud@gmail.com> | 2013-03-21 12:21:47 +0100 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-03-21 19:26:18 +0100 |
commit | 740924a267e85de09707ea158bbf594b4d8bae01 (patch) | |
tree | 7780a503c52891a2aac500cad9d9d3388fb5b648 /drivers/pinctrl/pinmux.c | |
parent | 48a23fac5eb0030a2d578ee2bde21b6e035b3d57 (diff) | |
download | linux-740924a267e85de09707ea158bbf594b4d8bae01.tar.gz linux-740924a267e85de09707ea158bbf594b4d8bae01.tar.bz2 linux-740924a267e85de09707ea158bbf594b4d8bae01.zip |
pinmux: forbid mux_usecount to be set at UINT_MAX
If pin_free is called on a pin already freed, mux_usecount is set to
UINT_MAX which is really a bad idea.
This will issue a warning, so that we can correct the code responsible
for the double free.
Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/pinmux.c')
-rw-r--r-- | drivers/pinctrl/pinmux.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c index 1a00658b3ea0..bd83c8b01cd1 100644 --- a/drivers/pinctrl/pinmux.c +++ b/drivers/pinctrl/pinmux.c @@ -194,6 +194,11 @@ static const char *pin_free(struct pinctrl_dev *pctldev, int pin, } if (!gpio_range) { + /* + * A pin should not be freed more times than allocated. + */ + if (WARN_ON(!desc->mux_usecount)) + return NULL; desc->mux_usecount--; if (desc->mux_usecount) return NULL; |