]> git.baikalelectronics.ru Git - 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)
commit257ba39169ea849b239c83c709b390c7e5650bb4
treeef6428fc483c2e1b7f6259edef2262c36b2886bb
parent432cbc65138913fedafb394bd672f467de59796f
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: 8a4648ede0ca ("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