Lukas Wunner
3e538c536f
spi: Prevent adding devices below an unregistering controller
...
commit ddf75be47ca748f8b12d28ac64d624354fddf189 upstream.
CONFIG_OF_DYNAMIC and CONFIG_ACPI allow adding SPI devices at runtime
using a DeviceTree overlay or DSDT patch. CONFIG_SPI_SLAVE allows the
same via sysfs.
But there are no precautions to prevent adding a device below a
controller that's being removed. Such a device is unusable and may not
even be able to unbind cleanly as it becomes inaccessible once the
controller has been torn down. E.g. it is then impossible to quiesce
the device's interrupt.
of_spi_notify() and acpi_spi_notify() do hold a ref on the controller,
but otherwise run lockless against spi_unregister_controller().
Fix by holding the spi_add_lock in spi_unregister_controller() and
bailing out of spi_add_device() if the controller has been unregistered
concurrently.
Fixes: ce79d54ae4 ("spi/of: Add OF notifier handler")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org # v3.19+
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Octavian Purdila <octavian.purdila@intel.com>
Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Link: https://lore.kernel.org/r/a8c3205088a969dc8410eec1eba9aface60f36af.1596451035.git.lukas@wunner.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-08-26 10:40:50 +02:00
..
accessibility
acpi
ACPICA: Do not increment operation_region reference counts for field units
2020-08-19 08:16:05 +02:00
amba
android
binder: Prevent context manager from incrementing ref 0
2020-08-11 15:33:35 +02:00
ata
atm
atm: fix atm_dev refcnt leaks in atmtcp_remove_persistent
2020-08-11 15:33:38 +02:00
auxdisplay
base
driver core: Avoid binding drivers to dead devices
2020-08-21 13:05:26 +02:00
bcma
block
loop: be paranoid on exit and prevent new additions / removals
2020-08-19 08:15:59 +02:00
bluetooth
Bluetooth: hci_serdev: Only unregister device if it was registered
2020-08-19 08:16:16 +02:00
bus
bus: ti-sysc: Add missing quirk flags for usb_host_hs
2020-08-19 08:16:00 +02:00
cdrom
char
tpm: Unify the mismatching TPM space buffer sizes
2020-08-19 08:16:27 +02:00
clk
clk: bcm2835: Do not use prediv with bcm2711's PLLs
2020-08-21 13:05:35 +02:00
clocksource
connector
counter
cpufreq
cpufreq: dt: fix oops on armada37xx
2020-08-19 08:16:25 +02:00
cpuidle
crypto
crypto: caam - Remove broken arc4 support
2020-08-21 13:05:32 +02:00
dax
dca
devfreq
dio
dma
dmaengine: ioat setting ioat timeout as module parameter
2020-07-29 10:18:37 +02:00
dma-buf
dmabuf: use spinlock to access dmabuf->name
2020-07-29 10:18:29 +02:00
edac
EDAC: Fix reference count leaks
2020-08-19 08:15:54 +02:00
eisa
extcon
firewire
firmware
firmware: arm_scmi: Fix SCMI genpd domain probing
2020-08-19 08:15:55 +02:00
fpga
fpga: dfl: fix bug in port reset handshake
2020-07-29 10:18:31 +02:00
fsi
gnss
gpio
gpio: arizona: put pm_runtime in case of failure
2020-07-29 10:18:26 +02:00
gpu
drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset()
2020-08-26 10:40:47 +02:00
greybus
hid
HID: input: Fix devices that return multiple bytes in battery report
2020-08-19 08:15:53 +02:00
hsi
hv
Drivers: hv: vmbus: Ignore CHANNELMSG_TL_CONNECT_RESULT(23)
2020-08-11 15:33:38 +02:00
hwmon
hwmon: (scmi) Fix potential buffer overflow in scmi_hwmon_probe()
2020-07-29 10:18:39 +02:00
hwspinlock
hwtracing
coresight: tmc: Fix TMC mode read in tmc_read_unprepare_etb()
2020-08-19 08:16:14 +02:00
i2c
i2c: iproc: fix race between client unreg and isr
2020-08-21 13:05:38 +02:00
i3c
ide
idle
iio
iio: dac: ad5592r: fix unbalanced mutex unlocks in ad5592r_read_raw()
2020-08-21 13:05:24 +02:00
infiniband
RDMA/counter: Allow manually bind QPs with different pids to same counter
2020-08-21 13:05:32 +02:00
input
Input: sentelic - fix error return when fsp_reg_write fails
2020-08-21 13:05:36 +02:00
interconnect
iommu
iommu/omap: Check for failure of a call to omap_iommu_dump_ctx
2020-08-21 13:05:33 +02:00
ipack
irqchip
genirq/affinity: Make affinity setting if activated opt-in
2020-08-21 13:05:20 +02:00
isdn
leds
leds: core: Flush scheduled work for system suspend
2020-08-19 08:16:11 +02:00
lightnvm
macintosh
macintosh/via-macii: Access autopoll_devs when inside lock
2020-08-19 08:16:15 +02:00
mailbox
mcb
md
bcache: avoid nr_stripes overflow in bcache_device_init()
2020-08-26 10:40:48 +02:00
media
media: rockchip: rga: Only set output CSC mode for RGB input
2020-08-21 13:05:31 +02:00
memory
memstick
message
mfd
mfd: dln2: Run event handler loop under spinlock
2020-08-21 13:05:38 +02:00
misc
cxl: Fix kobject memleak
2020-08-19 08:16:08 +02:00
mmc
mmc: renesas_sdhi_internal_dmac: clean up the code for dma complete
2020-08-21 13:05:32 +02:00
mtd
mtd: rawnand: fsl_upm: Remove unused mtd var
2020-08-21 13:05:30 +02:00
mux
net
net: wan: wanxl: use $(M68KCC) instead of $(M68KAS) for rebuilding firmware
2020-08-26 10:40:46 +02:00
nfc
nfc: s3fwrn5: add missing release on skb in s3fwrn5_recv_frame
2020-08-05 09:59:50 +02:00
ntb
nubus
nvdimm
libnvdimm/security: ensure sysfs poll thread woke up and fetch updated attr
2020-08-21 13:05:35 +02:00
nvme
nvme-multipath: do not fall back to __nvme_find_path() for non-optimized paths
2020-08-19 08:15:59 +02:00
nvmem
of
of: of_mdio: Correct loop scanning logic
2020-07-22 09:32:55 +02:00
opp
oprofile
parisc
parisc: mask out enable and reserved bits from sba imask
2020-08-19 08:16:26 +02:00
parport
pci
PCI: qcom: Add support for tx term offset for rev 2.1.0
2020-08-21 13:05:20 +02:00
pcmcia
perf
drivers/perf: Prevent forced unbinding of PMU drivers
2020-07-29 10:18:40 +02:00
phy
phy: armada-38x: fix NETA lockup when repeatedly switching speeds
2020-08-19 08:16:14 +02:00
pinctrl
pinctrl: ingenic: Properly detect GPIO direction when configured for IRQ
2020-08-21 13:05:29 +02:00
platform
platform/chrome: cros_ec_ishtp: Fix a double-unlock issue
2020-08-21 13:05:30 +02:00
pnp
power
power: supply: check if calc_soc succeeded in pm860x_init_battery
2020-08-19 08:16:16 +02:00
powercap
pps
ps3
ptp
pwm
pwm: bcm-iproc: handle clk_get_rate() return
2020-08-21 13:05:34 +02:00
rapidio
ras
regulator
regulator: fix memory leak on error path of regulator_register()
2020-08-19 08:15:57 +02:00
remoteproc
remoteproc: qcom_q6v5_mss: Validate modem blob firmware size before load
2020-08-21 13:05:29 +02:00
reset
rpmsg
rtc
s390
s390/dasd: fix inability to use DASD with DIAG driver
2020-08-19 08:16:29 +02:00
sbus
scsi
scsi: lpfc: nvmet: Avoid hang / use-after-free again when destroying targetport
2020-08-21 13:05:35 +02:00
sfi
sh
siox
slimbus
slimbus: core: Fix mismatch in of_node_get/put
2020-07-22 09:33:08 +02:00
soc
soc: qcom: rpmh-rsc: Set suppress_bind_attrs flag
2020-08-19 08:15:59 +02:00
soundwire
soundwire: intel: fix memory leak with devm_kasprintf
2020-07-22 09:33:00 +02:00
spi
spi: Prevent adding devices below an unregistering controller
2020-08-26 10:40:50 +02:00
spmi
ssb
staging
staging: rtl8192u: fix a dubious looking mask before a shift
2020-08-19 08:16:13 +02:00
target
tc
tee
thermal
thermal: ti-soc-thermal: Fix reversed condition in ti_thermal_expose_sensor()
2020-08-19 08:16:14 +02:00
thunderbolt
tty
vt: Reject zero-sized screen buffer size.
2020-07-29 10:18:43 +02:00
uio
uio_pdrv_genirq: fix use without device tree and no interrupt
2020-07-22 09:33:13 +02:00
usb
USB: serial: ftdi_sio: clean up receive processing
2020-08-21 13:05:31 +02:00
vfio
vhost
vhost/scsi: fix up req type endian-ness
2020-08-05 09:59:42 +02:00
video
video: pxafb: Fix the function used to balance a 'dma_alloc_coherent()' call
2020-08-19 08:16:06 +02:00
virt
virt: vbox: Fix guest capabilities mask check
2020-07-22 09:33:11 +02:00
virtio
virtio_balloon: fix up endian-ness for free cmd id
2020-08-05 09:59:43 +02:00
visorbus
vlynq
vme
w1
watchdog
watchdog: initialize device before misc_register
2020-08-21 13:05:36 +02:00
xen
xen/gntdev: Fix dmabuf import with non-zero sgt offset
2020-08-19 08:16:29 +02:00
zorro
Kconfig
Makefile