linux-stable/drivers
Duoming Zhou 553213432e drivers: tty: serial: Fix deadlock in sa1100_set_termios()
[ Upstream commit 62b2caef40 ]

There is a deadlock in sa1100_set_termios(), which is shown
below:

   (Thread 1)              |      (Thread 2)
                           | sa1100_enable_ms()
sa1100_set_termios()       |  mod_timer()
 spin_lock_irqsave() //(1) |  (wait a time)
 ...                       | sa1100_timeout()
 del_timer_sync()          |  spin_lock_irqsave() //(2)
 (wait timer to stop)      |  ...

We hold sport->port.lock in position (1) of thread 1 and
use del_timer_sync() to wait timer to stop, but timer handler
also need sport->port.lock in position (2) of thread 2. As a result,
sa1100_set_termios() will block forever.

This patch moves del_timer_sync() before spin_lock_irqsave()
in order to prevent the deadlock.

Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
Link: https://lore.kernel.org/r/20220417111626.7802-1-duoming@zju.edu.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-06-14 18:41:34 +02:00
..
accessibility
acpi ACPI: property: Release subnode properties with data nodes 2022-06-09 10:26:19 +02:00
amba
android binder: Address corner cases in deferred copy and fixup 2022-05-09 09:16:14 +02:00
ata ata: pata_octeon_cf: Fix refcount leak in octeon_cf_probe 2022-06-14 18:41:29 +02:00
atm atm: eni: Add check for dma_map_single 2022-03-15 11:01:52 +00:00
auxdisplay
base driver core: Fix wait_for_device_probe() & deferred_probe_timeout interaction 2022-06-14 18:41:25 +02:00
bcma
block nbd: don't clear 'NBD_CMD_INFLIGHT' flag if request is not completed 2022-06-14 18:41:22 +02:00
bluetooth Bluetooth: btmtksdio: fix use-after-free at btmtksdio_recv_event 2022-06-09 10:25:52 +02:00
bus bus: ti-sysc: Fix warnings for unbind for serial 2022-06-14 18:41:19 +02:00
cdrom
char Revert "random: use static branch for crng_ready()" 2022-06-09 10:26:31 +02:00
clk clk: tegra: Add missing reset deassertion 2022-06-09 10:26:29 +02:00
clocksource clocksource/drivers/oxnas-rps: Fix irq_of_parse_and_map() return value 2022-06-14 18:41:20 +02:00
comedi
connector
counter counter: Stop using dev_get_drvdata() to get the counter device 2022-03-15 19:24:13 +01:00
cpufreq cpufreq: mediatek: Unregister platform device on exit 2022-06-09 10:26:12 +02:00
cpuidle cpuidle: PSCI: Improve support for suspend-to-RAM for PSCI OSI mode 2022-06-09 10:25:21 +02:00
crypto crypto: sun8i-ss - handle zero sized sg 2022-06-09 10:26:07 +02:00
cxl cxl/port: Hold port reference until decoder release 2022-04-08 13:58:07 +02:00
dax dax: make sure inodes are flushed before destroy cache 2022-04-08 13:58:07 +02:00
dca
devfreq PM / devfreq: rk3399_dmc: Disable edev on remove() 2022-06-09 10:25:32 +02:00
dio
dma dmaengine: zynqmp_dma: In struct zynqmp_dma_chan fix desc_size data type 2022-06-14 18:41:28 +02:00
dma-buf dma-buf: ensure unique directory name for dmabuf stats 2022-05-25 09:59:04 +02:00
edac EDAC/dmc520: Don't print an error for each unconfigured interrupt line 2022-06-09 10:25:40 +02:00
eisa
extcon extcon: ptn5150: Add queue work sync before driver release 2022-06-14 18:41:17 +02:00
firewire firewire: core: extend card->lock in fw_core_handle_bus_reset 2022-05-12 12:32:20 +02:00
firmware firmware: dmi-sysfs: Fix memory leak in dmi_sysfs_register_handle 2022-06-14 18:41:19 +02:00
fpga
fsi fsi: Aspeed: Fix a potential double free 2022-04-08 13:58:24 +02:00
gnss
gpio gpio: pca953x: use the correct register address to do regcache sync 2022-06-14 18:41:25 +02:00
gpu drm: imx: fix compiler warning with gcc-12 2022-06-14 18:41:32 +02:00
greybus greybus: svc: fix an error handling bug in gb_svc_hello() 2022-04-08 13:57:16 +02:00
hid HID: amd_sfh: Modify the hid name 2022-06-09 10:25:49 +02:00
hsi
hv Drivers: hv: vmbus: Fix handling of messages with transaction ID of zero 2022-06-09 10:26:03 +02:00
hwmon hwmon: (pmbus) Check PEC support before reading other registers 2022-06-09 10:25:57 +02:00
hwspinlock
hwtracing coresight: cpu-debug: Replace mutex with mutex_trylock on panic notifier 2022-06-14 18:41:17 +02:00
i2c i2c: cadence: Increase timeout per message if necessary 2022-06-14 18:41:27 +02:00
i3c
idle
iio iio: st_sensors: Add a local lock for protecting odr 2022-06-14 18:41:33 +02:00
infiniband RDMA/rxe: Generate a completion for unsupported/invalid opcode 2022-06-09 10:26:31 +02:00
input Input: stmfts - do not leave device disabled in stmfts_input_open 2022-06-09 10:26:11 +02:00
interconnect interconnect: Restore sync state by ignoring ipa-virt in provider count 2022-05-18 10:28:18 +02:00
iommu iommu/arm-smmu-v3: check return value after calling platform_get_resource() 2022-06-14 18:41:27 +02:00
ipack
irqchip irqchip: irq-xtensa-mx: fix initial IRQ affinity 2022-06-09 10:26:26 +02:00
isdn
leds
macintosh macintosh: via-pmu and via-cuda need RTC_LIB 2022-06-09 10:26:09 +02:00
mailbox mailbox: forward the hrtimer if not queued and under a lock 2022-06-09 10:26:10 +02:00
mcb
md md: bcache: check the return value of kzalloc() in detached_dev_do_request() 2022-06-09 10:26:32 +02:00
media media: coda: Add more H264 levels for CODA960 2022-06-09 10:26:25 +02:00
memory memory: samsung: exynos5422-dmc: Avoid some over memory allocation 2022-06-09 10:25:59 +02:00
memstick memstick/mspro_block: fix handling of read-only devices 2022-04-08 13:58:36 +02:00
message
mfd mfd: davinci_voicecodec: Fix possible null-ptr-deref davinci_vc_probe() 2022-06-09 10:26:10 +02:00
misc lkdtm/usercopy: Expand size of "out of frame" object 2022-06-14 18:41:33 +02:00
mmc mmc: core: Allows to override the timeout value for ioctl() path 2022-06-09 10:26:25 +02:00
most
mtd ubi: ubi_create_volume: Fix use-after-free when volume creation failed 2022-06-14 18:41:22 +02:00
mux
net nfp: flower: restructure flow-key for gre+vlan combination 2022-06-14 18:41:33 +02:00
nfc NFC: hci: fix sleep in atomic context bugs in nfc_hci_hcp_message_tx 2022-06-09 10:25:56 +02:00
ntb
nubus
nvdimm mce: fix set_mce_nospec to always unmap the whole page 2022-06-09 10:26:08 +02:00
nvme nvme: set dma alignment to dword 2022-06-09 10:25:53 +02:00
nvmem
of of: overlay: do not break notify on NOTIFY_{OK|STOP} 2022-06-09 10:25:43 +02:00
opp OPP: call of_node_put() on error path in _bandwidth_supported() 2022-06-09 10:26:11 +02:00
parisc parisc: Fix CPU affinity for Lasi, WAX and Dino chips 2022-04-13 19:27:26 +02:00
parport
pci PCI: qcom: Fix unbalanced PHY init on probe errors 2022-06-09 10:26:20 +02:00
pcmcia pcmcia: db1xxx_ss: restrict to MIPS_DB1XXX boards 2022-06-14 18:41:12 +02:00
perf arm_pmu: Validate single/group leader events 2022-04-27 14:41:15 +02:00
phy phy: qcom-qmp: fix pipe-clock imbalance on power-on failure 2022-06-14 18:41:16 +02:00
pinctrl pinctrl/rockchip: support setting input-enable param 2022-06-09 10:26:32 +02:00
platform MIPS: Loongson: Use hwmon_device_register_with_groups() to register hwmon 2022-06-09 10:26:12 +02:00
pnp
power power: supply: ab8500_fg: Allocate wq in probe 2022-06-14 18:41:16 +02:00
powercap powercap/dtpm_cpu: Reset per_cpu variable in the release function 2022-04-08 13:58:37 +02:00
pps pps: clients: gpio: Propagate return value from pps_gpio_probe 2022-04-08 13:58:24 +02:00
ps3
ptp ptp: ocp: have adjtime handle negative delta_ns correctly 2022-05-25 09:59:07 +02:00
pwm pwm: raspberrypi-poe: Fix endianness in firmware struct 2022-06-14 18:41:14 +02:00
rapidio
ras
regulator regulator: scmi: Fix refcount leak in scmi_regulator_probe 2022-06-09 10:25:54 +02:00
remoteproc remoteproc: imx_rproc: Ignore create mem entry for resource table 2022-06-14 18:41:13 +02:00
reset reset: tegra-bpmp: Restore Handle errors in BPMP response 2022-04-27 14:41:06 +02:00
rpmsg rpmsg: qcom_smd: Fix returning 0 if irq_of_parse_and_map() fails 2022-06-14 18:41:16 +02:00
rtc rtc: ftrtc010: Fix error handling in ftrtc010_rtc_probe 2022-06-14 18:41:18 +02:00
s390 s390/stp: clock_delta should be signed 2022-06-09 10:26:21 +02:00
sbus
scsi scsi: sd: Fix potential NULL pointer dereference 2022-06-14 18:41:25 +02:00
sh
siox
slimbus slimbus: qcom: Fix IRQ check in qcom_slim_probe 2022-05-18 10:28:20 +02:00
soc soc: rockchip: Fix refcount leak in rockchip_grf_init 2022-06-14 18:41:17 +02:00
soundwire soundwire: intel: prevent pm_runtime resume prior to system suspend 2022-06-14 18:41:17 +02:00
spi spi: fsi: Fix spurious timeout 2022-06-14 18:41:20 +02:00
spmi
ssb
staging drivers: staging: rtl8192e: Fix deadlock in rtllib_beacons_stop() 2022-06-14 18:41:34 +02:00
target target: remove an incorrect unmap zeroes data deduction 2022-06-09 10:25:40 +02:00
tc
tee tee: optee: add missing mutext_destroy in optee_ffa_probe 2022-05-09 09:16:17 +02:00
thermal thermal: devfreq_cooling: use local ops instead of global ops 2022-06-09 10:26:26 +02:00
thunderbolt thunderbolt: Use different lane for second DisplayPort tunnel 2022-06-14 18:41:34 +02:00
tty drivers: tty: serial: Fix deadlock in sa1100_set_termios() 2022-06-14 18:41:34 +02:00
uio
usb USB: host: isp116x: check return value after calling platform_get_resource() 2022-06-14 18:41:34 +02:00
vdpa vdpa: ifcvf: set pci driver data in probe 2022-06-14 18:41:24 +02:00
vfio vfio/pci: Fix vf_token mechanism when device-specific VF drivers are used 2022-04-20 09:36:18 +02:00
vhost Fix double fget() in vhost_net_set_backend() 2022-05-25 09:59:03 +02:00
video video: fbdev: pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove() 2022-06-14 18:41:28 +02:00
virt virt: acrn: fix a memory leak in acrn_dev_ioctl() 2022-04-08 13:58:30 +02:00
virtio virtio: pci: Fix an error handling path in vp_modern_probe() 2022-06-14 18:41:23 +02:00
visorbus
vlynq
vme
w1 w1: w1_therm: fixes w1_seq for ds28ea00 sensors 2022-04-13 19:27:24 +02:00
watchdog watchdog: ts4800_wdt: Fix refcount leak in ts4800_wdt_probe 2022-06-14 18:41:20 +02:00
xen xen: unexport __init-annotated xen_xlate_map_ballooned_pages() 2022-06-14 18:41:30 +02:00
zorro
Kconfig
Makefile