linux/drivers/char/ipmi
Yifei Gao 05ec76cfbc ipmi: Fix use-after-free of cmd_rcvr in _ipmi_destroy_user()
Commit 9e91f8a6c8 ("ipmi:msghandler: Remove srcu for the
ipmi_interfaces list") dropped the synchronize_rcu() between unlinking
the command receivers from intf->cmd_rcvrs and freeing them, updating
only the comment that explains why the barrier is needed.

The cmd_rcvrs list is still traversed under plain RCU: find_cmd_rcvr()
walks it inside rcu_read_lock(), and handle_ipmb_get_msg_cmd() borrows
rcvr->user from that lookup within the same read-side section. Without
the grace period, _ipmi_destroy_user() can kfree() a cmd_rcvr while a
reader still holds a pointer to it, causing a use-after-free.

The rework only made srcu unnecessary for the interfaces list; the
cmd_rcvrs list still relies on plain RCU. Restore the synchronize_rcu()
before freeing the receivers.

Fixes: 9e91f8a6c8 ("ipmi:msghandler: Remove srcu for the ipmi_interfaces list")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Yifei Gao <gyf161023@gmail.com>
Message-ID: <20260825234630.1196170-1-gyf161023@gmail.com>
Signed-off-by: Corey Minyard <corey@minyard.net>
2026-08-25 18:55:02 -05:00
..
bt-bmc.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
ipmb_dev_int.c char: ipmi: use named initializers for acpi_device_id 2026-08-12 16:16:43 -05:00
ipmi_bt_sm.c ipmi: Clean up some printks 2020-09-15 09:57:45 -05:00
ipmi_devintf.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ipmi_dmi.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ipmi_dmi.h ipmi_si: Rework some include files 2019-08-02 07:25:03 -05:00
ipmi_ipmb.c ipmi: Use named initializers for struct i2c_device_id 2026-05-19 12:32:40 -05:00
ipmi_kcs_sm.c ipmi:kcs: Reduce the number of retries 2026-05-19 06:32:11 -05:00
ipmi_msghandler.c ipmi: Fix use-after-free of cmd_rcvr in _ipmi_destroy_user() 2026-08-25 18:55:02 -05:00
ipmi_plat_data.c ipmi: Handle device properties with software node API 2021-03-10 19:00:02 -06:00
ipmi_plat_data.h ipmi: Add the i2c-addr property for SSIF interfaces 2019-04-24 09:02:53 -05:00
ipmi_powernv.c ipmi: Allow an SMI sender to return an error 2025-09-08 10:21:41 -05:00
ipmi_poweroff.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
ipmi_si_hardcode.c ipmi: Use regspacings passed as a module parameter 2023-12-19 06:32:27 -06:00
ipmi_si_hotmod.c ipmi_si: Join string literals back 2021-04-02 12:53:42 -05:00
ipmi_si_intf.c ipmi:si: Add async init to ipmi_si 2026-08-18 12:54:52 -05:00
ipmi_si_ls2k.c ipmi:ls2k: Make ipmi_ls2k_platform_driver static 2026-02-03 21:06:19 -06:00
ipmi_si_mem_io.c ipmi_si: Rework some include files 2019-08-02 07:25:03 -05:00
ipmi_si_parisc.c ipmi:si: Move SI type information into an info structure 2025-05-07 17:25:47 -05:00
ipmi_si_pci.c ipmi:si: Move SI type information into an info structure 2025-05-07 17:25:47 -05:00
ipmi_si_platform.c char: ipmi: use named initializers for acpi_device_id 2026-08-12 16:16:43 -05:00
ipmi_si_port_io.c ipmi_si: Rework some include files 2019-08-02 07:25:03 -05:00
ipmi_si_sm.h ipmi_si: Rework some include files 2019-08-02 07:25:03 -05:00
ipmi_si.h ipmi: Add Loongson-2K BMC support 2025-09-16 10:15:54 -05:00
ipmi_smic_sm.c ipmi: Clean up some printks 2020-09-15 09:57:45 -05:00
ipmi_ssif.c char: ipmi: use named initializers for acpi_device_id 2026-08-12 16:16:43 -05:00
ipmi_watchdog.c ipmi: Fix strcpy source and destination the same 2025-06-13 19:06:26 -05:00
Kconfig ipmi:si: Add async init to ipmi_si 2026-08-18 12:54:52 -05:00
kcs_bmc_aspeed.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
kcs_bmc_cdev_ipmi.c ipmi: Add __init/__exit annotations to module init/exit funcs 2022-09-22 10:55:46 -05:00
kcs_bmc_client.h ipmi: kcs_bmc: Allow clients to control KCS IRQ state 2021-06-21 19:50:28 -05:00
kcs_bmc_device.h ipmi: kcs_bmc: Allow clients to control KCS IRQ state 2021-06-21 19:50:28 -05:00
kcs_bmc_npcm7xx.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
kcs_bmc_serio.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
kcs_bmc.c ipmi: fix potential deadlock on &kcs_bmc->lock 2023-07-04 09:22:45 -05:00
kcs_bmc.h ipmi: kcs_bmc: Allow clients to control KCS IRQ state 2021-06-21 19:50:28 -05:00
Makefile ipmi: Add Loongson-2K BMC support 2025-09-16 10:15:54 -05:00
ssif_bmc.c ipmi: Use named initializers for struct i2c_device_id 2026-05-19 12:32:40 -05:00