linux/drivers/pinctrl/mediatek
Liang Jie 822019d751 pinctrl: mediatek: make devm allocations safer and clearer in mtk_eint_do_init()
[ Upstream commit 255b721c96 ]

mtk_eint_do_init() allocates several pointer arrays which are then
populated in a per-instance loop and freed on error. The arrays are
currently allocated with devm_kmalloc(), so their entries are left
uninitialised until the per-instance allocations succeed.

On a failure in the middle of the loop, the error path iterates over
the full nbase range and calls devm_kfree() on each element. For
indices which were never initialised, the corresponding array entries
contain stack garbage. If any of those happen to be non-zero,
devm_kfree() will pass them to devres_destroy(), which will WARN
because there is no matching devm_kmalloc() resource for such bogus
pointers.

Improve the robustness and readability by:

  - Using devm_kcalloc() for the pointer arrays so that all entries
    start as NULL, ensuring that only genuinely initialised elements
    may be freed and preventing spurious WARN_ON()s in the error path.
  - Switching the allocations to sizeof(*ptr) / sizeof(**ptr) forms,
    avoiding hard-coded element types and making the code more resilient
    to future type changes.
  - Dropping the redundant NULL checks before devm_kfree(), as
    devm_kfree() safely handles NULL pointers.

The functional behaviour in the successful initialisation path remains
unchanged, while the error handling becomes simpler and less
error-prone.

Reviewed-by: fanggeng <fanggeng@lixiang.com>
Signed-off-by: Liang Jie <liangjie@lixiang.com>
Signed-off-by: Linus Walleij <linusw@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2026-03-04 07:20:33 -05:00
..
Kconfig pinctrl: mediatek: Add pinctrl driver for mt8189 2025-07-23 13:35:40 +02:00
Makefile pinctrl: mediatek: Add pinctrl driver for mt8189 2025-07-23 13:35:40 +02:00
mtk-eint.c pinctrl: mediatek: make devm allocations safer and clearer in mtk_eint_do_init() 2026-03-04 07:20:33 -05:00
mtk-eint.h pinctrl: mediatek: eint: Fix invalid pointer dereference for v1 platforms 2025-05-21 00:39:30 +02:00
pinctrl-airoha.c Pin control changes for the v6.18 kernel cycle: 2025-10-01 13:14:48 -07:00
pinctrl-moore.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-moore.h pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt76x8.c pinctrl: ralink: mt76x8: fix pinmux function 2024-06-17 09:23:02 +02:00
pinctrl-mt2701.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt2712.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt6397.c pinctrl: Explicitly include correct DT includes 2023-07-20 21:41:24 +02:00
pinctrl-mt6765.c pinctrl: mediatek: fix module autoloading 2024-04-17 10:43:50 +02:00
pinctrl-mt6779.c pinctrl: mediatek: fix module autoloading 2024-04-17 10:43:50 +02:00
pinctrl-mt6795.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt6797.c pinctrl: mediatek: paris: Unify probe function by using OF match data 2022-03-17 02:06:52 +01:00
pinctrl-mt6893.c pinctrl: mediatek: Add pinctrl driver for MT6893 Dimensity 1200 2025-04-17 09:39:15 +02:00
pinctrl-mt7620.c pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00
pinctrl-mt7621.c pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00
pinctrl-mt7622.c pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt7623.c pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt7629.c pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt7981.c pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt7986.c pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt7988.c pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mt8127.c pinctrl: Explicitly include correct DT includes 2023-07-20 21:41:24 +02:00
pinctrl-mt8135.c pinctrl: Explicitly include correct DT includes 2023-07-20 21:41:24 +02:00
pinctrl-mt8167.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt8173.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt8183.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt8186.c pinctrl: mediatek: Drop bogus slew rate register range for MT8186 2024-02-07 11:47:49 +01:00
pinctrl-mt8188.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt8189.c pinctrl: mediatek: mt8189: restore previous register base name array order 2026-01-17 16:35:20 +01:00
pinctrl-mt8192.c pinctrl: mediatek: Drop bogus slew rate register range for MT8192 2024-02-07 11:47:49 +01:00
pinctrl-mt8195.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt8196.c pinctrl: mediatek: mt8196: align register base names to dt-bindings ones 2025-10-13 13:07:36 +02:00
pinctrl-mt8365.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mt8516.c pinctrl: mediatek: Switch to use no-IRQ PM helpers 2023-12-04 15:32:42 +01:00
pinctrl-mtk-common-v2.c pinctrl: mediatek: eint: Fix invalid pointer dereference for v1 platforms 2025-05-21 00:39:30 +02:00
pinctrl-mtk-common-v2.h pinctrl: mediatek: moore: replace struct function_desc with struct pinfunction 2025-09-08 14:21:59 +02:00
pinctrl-mtk-common.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-mtk-common.h pinctrl: mediatek: common: add mt8365_set_clr_mode() callback for broken SET/CLR modes 2022-11-07 15:42:53 +01:00
pinctrl-mtk-mt2701.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
pinctrl-mtk-mt2712.h pinctrl: mediatek: Use the correct style for SPDX License Identifier 2019-12-12 11:30:33 +01:00
pinctrl-mtk-mt6397.h pinctrl: mtk: fix check warnings. 2018-03-26 10:58:33 +02:00
pinctrl-mtk-mt6765.h pinctrl: mediatek: add MT6765 pinctrl driver 2018-09-21 09:12:55 -07:00
pinctrl-mtk-mt6779.h pinctrl: mediatek: add pinctrl support for MT6779 SoC 2020-08-04 01:29:09 +02:00
pinctrl-mtk-mt6795.h pinctrl: mediatek: Add pinctrl driver for MT6795 Helio X10 2022-05-19 15:11:15 +02:00
pinctrl-mtk-mt6797.h pinctrl: mediatek: Add initial pinctrl driver for MT6797 SoC 2018-11-15 11:05:54 +01:00
pinctrl-mtk-mt6893.h pinctrl: mediatek: Add pinctrl driver for MT6893 Dimensity 1200 2025-04-17 09:39:15 +02:00
pinctrl-mtk-mt8127.h pinctrl: mtk: fix check warnings. 2018-03-26 10:58:33 +02:00
pinctrl-mtk-mt8135.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
pinctrl-mtk-mt8167.h pinctrl: mediatek: Add MT8167 Pinctrl driver 2020-09-27 11:20:09 +02:00
pinctrl-mtk-mt8173.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
pinctrl-mtk-mt8183.h pinctrl: mediatek: add MT8183 pinctrl driver 2018-09-18 14:53:29 -07:00
pinctrl-mtk-mt8186.h pinctrl: add pinctrl driver on mt8186 2022-03-15 01:00:03 +01:00
pinctrl-mtk-mt8188.h pinctrl: mediatek: add mt8188 driver 2022-08-25 14:50:44 +02:00
pinctrl-mtk-mt8189.h pinctrl: mediatek: Add pinctrl driver for mt8189 2025-07-23 13:35:40 +02:00
pinctrl-mtk-mt8192.h pinctrl: mediatek: Add pinctrl driver for mt8192 2020-08-27 10:50:57 +02:00
pinctrl-mtk-mt8195.h pinctrl: add pinctrl driver on mt8195 2021-04-22 01:53:02 +02:00
pinctrl-mtk-mt8196.h pinctrl: mediatek: pinctrl: mediatek: add mt8196 eint pin 2025-04-23 10:40:50 +02:00
pinctrl-mtk-mt8365.h pinctrl: mediatek: add support for mt8365 SoC 2021-05-27 16:50:15 +02:00
pinctrl-mtk-mt8516.h pinctrl: mediatek: Add MT8516 Pinctrl driver 2019-05-03 07:53:13 +01:00
pinctrl-mtmips.c pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00
pinctrl-mtmips.h pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00
pinctrl-paris.c pinctrl: generic: rename PIN_CONFIG_OUTPUT to LEVEL 2025-09-08 14:24:20 +02:00
pinctrl-paris.h pinctrl: mediatek: Add EINT support for multiple addresses 2025-03-24 08:51:09 +01:00
pinctrl-rt305x.c pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00
pinctrl-rt2880.c pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00
pinctrl-rt3883.c pinctrl: ralink: move to mediatek as mtmips 2023-03-19 21:47:25 +01:00