]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit
mfd: Remove software node conditionally and locate at right place
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 10 May 2021 14:15:52 +0000 (17:15 +0300)
committerLee Jones <lee.jones@linaro.org>
Wed, 2 Jun 2021 09:50:00 +0000 (10:50 +0100)
commit5a23e8b0fd6010e25ae58362292235cc9213ca57
treeef6428fc483c2e1b7f6259edef2262c36b2886bb
parentf62da567d8ad76185a5232a4e0250576773a1c0c
mfd: Remove software node conditionally and locate at right place

Currently the software node is removed in error case and at ->remove()
stage unconditionally, that ruins the symmetry. Besides, in some cases,
when mfd_add_device() fails, the device_remove_software_node() call
may lead to NULL pointer dereference:

  BUG: kernel NULL pointer dereference, address: 00000000
  ...
  EIP: strlen+0x12/0x20
  ...
  kernfs_name_hash+0x13/0x70
  kernfs_find_ns+0x32/0xc0
  kernfs_remove_by_name_ns+0x2a/0x90
  sysfs_remove_link+0x16/0x30
  software_node_notify.cold+0x34/0x6b
  device_remove_software_node+0x5a/0x90
  mfd_add_device.cold+0x30a/0x427

Fix all these by guarding device_remove_software_node() with a conditional
and locating it at the right place.

Fixes: 42e59982917a ("mfd: core: Add support for software nodes")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/mfd-core.c