linux/drivers/char/ipmi
Corey Minyard 3b9a907223 ipmi: fix sleep-in-atomic in free_user at cleanup SRCU user->release_barrier
free_user() could be called in atomic context.

This patch pushed the free operation off into a workqueue.

Example:

 BUG: sleeping function called from invalid context at kernel/workqueue.c:2856
 in_atomic(): 1, irqs_disabled(): 0, pid: 177, name: ksoftirqd/27
 CPU: 27 PID: 177 Comm: ksoftirqd/27 Not tainted 4.19.25-3 #1
 Hardware name: AIC 1S-HV26-08/MB-DPSB04-06, BIOS IVYBV060 10/21/2015
 Call Trace:
  dump_stack+0x5c/0x7b
  ___might_sleep+0xec/0x110
  __flush_work+0x48/0x1f0
  ? try_to_del_timer_sync+0x4d/0x80
  _cleanup_srcu_struct+0x104/0x140
  free_user+0x18/0x30 [ipmi_msghandler]
  ipmi_free_recv_msg+0x3a/0x50 [ipmi_msghandler]
  deliver_response+0xbd/0xd0 [ipmi_msghandler]
  deliver_local_response+0xe/0x30 [ipmi_msghandler]
  handle_one_recv_msg+0x163/0xc80 [ipmi_msghandler]
  ? dequeue_entity+0xa0/0x960
  handle_new_recv_msgs+0x15c/0x1f0 [ipmi_msghandler]
  tasklet_action_common.isra.22+0x103/0x120
  __do_softirq+0xf8/0x2d7
  run_ksoftirqd+0x26/0x50
  smpboot_thread_fn+0x11d/0x1e0
  kthread+0x103/0x140
  ? sort_range+0x20/0x20
  ? kthread_destroy_worker+0x40/0x40
  ret_from_fork+0x1f/0x40

Fixes: 77f8269606 ("ipmi: fix use-after-free of user->release_barrier.rda")

Reported-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Cc: stable@vger.kernel.org # 5.0
Cc: Yang Yingliang <yangyingliang@huawei.com>
2019-04-17 10:29:27 -05:00
..
bt-bmc.c ipmi: Add or fix SPDX-License-Identifier in all files 2018-02-27 07:42:51 -06:00
ipmi_bt_sm.c ipmi: Convert pr_xxx() to dev_xxx() in the BT code 2018-09-18 16:15:33 -05:00
ipmi_devintf.c ipmi: Fix return value when a message is truncated 2019-02-09 19:48:42 -06:00
ipmi_dmi.c ipmi: Fix failure on SMBIOS specified devices 2019-04-16 21:36:47 +00:00
ipmi_dmi.h ipmi: Consolidate the adding of platform devices 2019-02-22 07:12:41 -06:00
ipmi_kcs_sm.c ipmi: Convert printk(KERN_<level> to pr_<level>( 2018-09-18 16:15:33 -05:00
ipmi_msghandler.c ipmi: fix sleep-in-atomic in free_user at cleanup SRCU user->release_barrier 2019-04-17 10:29:27 -05:00
ipmi_plat_data.c ipmi: Consolidate the adding of platform devices 2019-02-22 07:12:41 -06:00
ipmi_plat_data.h ipmi: Consolidate the adding of platform devices 2019-02-22 07:12:41 -06:00
ipmi_powernv.c ipmi:powernv: Convert ipmi_smi_t to struct ipmi_smi 2018-09-18 16:15:33 -05:00
ipmi_poweroff.c ipmi: Use more common logging styles 2018-09-18 16:15:33 -05:00
ipmi_si_hardcode.c ipmi: ipmi_si_hardcode.c: init si_type array to fix a crash 2019-04-16 21:36:49 +00:00
ipmi_si_hotmod.c ipmi_si: Potential array underflow in hotmod_handler() 2019-02-22 14:59:25 -06:00
ipmi_si_intf.c ipmi_si: Remove hacks for adding a dummy platform devices 2019-02-22 07:12:41 -06:00
ipmi_si_mem_io.c ipmi_si: fix use-after-free of resource->name 2019-02-09 19:48:41 -06:00
ipmi_si_parisc.c ipmi_si: Rename addr_type to addr_space to match what it does 2019-02-22 07:12:41 -06:00
ipmi_si_pci.c ipmi_si: Rename addr_type to addr_space to match what it does 2019-02-22 07:12:41 -06:00
ipmi_si_platform.c ipmi_si: Consolidate scanning the platform bus 2019-02-22 07:12:41 -06:00
ipmi_si_port_io.c ipmi_si: fix use-after-free of resource->name 2019-02-09 19:48:41 -06:00
ipmi_si_sm.h ipmi_si: Rename addr_type to addr_space to match what it does 2019-02-22 07:12:41 -06:00
ipmi_si.h ipmi_si: Consolidate scanning the platform bus 2019-02-22 07:12:41 -06:00
ipmi_smic_sm.c ipmi: Convert printk(KERN_<level> to pr_<level>( 2018-09-18 16:15:33 -05:00
ipmi_ssif.c ipmi:ssif: Change some pr_xxx to dev_xxx calls 2019-02-09 19:48:42 -06:00
ipmi_watchdog.c ipmi: Use more common logging styles 2018-09-18 16:15:33 -05:00
Kconfig ipmi: Consolidate the adding of platform devices 2019-02-22 07:12:41 -06:00
kcs_bmc_aspeed.c ipmi: kcs_bmc: coding-style fixes and use new poll type 2018-02-26 09:49:21 -06:00
kcs_bmc_npcm7xx.c ipmi: NPCM7xx KCS BMC: enable interrupt to the host 2018-05-23 08:29:23 -05:00
kcs_bmc.c ipmi: kcs_bmc: handle devm_kasprintf() failure case 2019-02-09 19:48:42 -06:00
kcs_bmc.h ipmi: kcs_bmc: coding-style fixes and use new poll type 2018-02-26 09:49:21 -06:00
Makefile ipmi: Consolidate the adding of platform devices 2019-02-22 07:12:41 -06:00