mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-10 19:35:21 +02:00
pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER
[ Upstream commitadec57ff8e
] In create_pinctrl(), pinctrl_maps_mutex is acquired before calling add_setting(). If add_setting() returns -EPROBE_DEFER, create_pinctrl() calls pinctrl_free(). However, pinctrl_free() attempts to acquire pinctrl_maps_mutex, which is already held by create_pinctrl(), leading to a potential deadlock. This patch resolves the issue by releasing pinctrl_maps_mutex before calling pinctrl_free(), preventing the deadlock. This bug was discovered and resolved using Coverity Static Analysis Security Testing (SAST) by Synopsys, Inc. Fixes:42fed7ba44
("pinctrl: move subsystem mutex to pinctrl_dev struct") Suggested-by: Maximilian Heyne <mheyne@amazon.de> Signed-off-by: Hagar Hemdan <hagarhem@amazon.com> Link: https://lore.kernel.org/r/20240604085838.3344-1-hagarhem@amazon.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f1d05111b3
commit
4038c57bf6
|
@ -1098,8 +1098,8 @@ static struct pinctrl *create_pinctrl(struct device *dev,
|
|||
* an -EPROBE_DEFER later, as that is the worst case.
|
||||
*/
|
||||
if (ret == -EPROBE_DEFER) {
|
||||
pinctrl_free(p, false);
|
||||
mutex_unlock(&pinctrl_maps_mutex);
|
||||
pinctrl_free(p, false);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user