diff options
| author | Karl Mehltretter <kmehltretter@gmail.com> | 2026-07-19 14:11:40 +0200 |
|---|---|---|
| committer | Linus Walleij <linusw@kernel.org> | 2026-07-25 11:17:23 +0200 |
| commit | 015b5bcbcb622b32317642be91a7f79aa5413649 (patch) | |
| tree | b074969498f973c851332a140c55c6b6ccde35fd /rust/zerocopy-derive/derive/git@git.tavy.me:linux.git | |
| parent | b2b5eb68835d75e3444829a4af8c293f59bf2396 (diff) | |
pinctrl: devicetree: don't free uninitialized dev_name on error path
dt_remember_or_free_map() duplicates dev_name for each map entry. If
kstrdup_const() fails, dt_free_map() frees dev_name in all num_maps
entries, including entries that have not been initialized.
Some pinctrl drivers, including pinctrl-imx, allocate the map with
kmalloc() and leave dev_name for the core to initialize. The untouched
entries therefore contain uninitialized data which is passed to
kfree_const().
Reproduced on qemu's mcimx6ul-evk (pinctrl-imx) with failslab injection
while binding the pinctrl-consuming device, under KASAN:
BUG: KASAN: double-free in dt_free_map+0x34/0xa4
Free of addr c425a900 by task init/1
kfree from dt_free_map+0x34/0xa4
dt_free_map from dt_remember_or_free_map+0x184/0x198
dt_remember_or_free_map from pinctrl_dt_to_map+0x33c/0x4c8
pinctrl_dt_to_map from create_pinctrl+0x9c/0x5c0
Initialize all dev_name fields to NULL before duplicating the device
name, making the full-map cleanup safe after a partial failure.
Fixes: be4c60b563ed ("pinctrl: devicetree: Avoid taking direct reference to device name string")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-fable-5
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
Signed-off-by: Linus Walleij <linusw@kernel.org>
Diffstat (limited to 'rust/zerocopy-derive/derive/git@git.tavy.me:linux.git')
0 files changed, 0 insertions, 0 deletions
