Gui-Dong Han
85f6a6590d
usb: mon: Fix atomicity violation in mon_bin_vma_fault
...
commit 2dd23cc4d0e6aa55cf9fb3b05f2f4165b01de81c upstream.
In mon_bin_vma_fault():
offset = vmf->pgoff << PAGE_SHIFT;
if (offset >= rp->b_size)
return VM_FAULT_SIGBUS;
chunk_idx = offset / CHUNK_SIZE;
pageptr = rp->b_vec[chunk_idx].pg;
The code is executed without holding any lock.
In mon_bin_vma_close():
spin_lock_irqsave(&rp->b_lock, flags);
rp->mmap_active--;
spin_unlock_irqrestore(&rp->b_lock, flags);
In mon_bin_ioctl():
spin_lock_irqsave(&rp->b_lock, flags);
if (rp->mmap_active) {
...
} else {
...
kfree(rp->b_vec);
rp->b_vec = vec;
rp->b_size = size;
...
}
spin_unlock_irqrestore(&rp->b_lock, flags);
Concurrent execution of mon_bin_vma_fault() with mon_bin_vma_close() and
mon_bin_ioctl() could lead to atomicity violations. mon_bin_vma_fault()
accesses rp->b_size and rp->b_vec without locking, risking array
out-of-bounds access or use-after-free bugs due to possible modifications
in mon_bin_ioctl().
This possible bug is found by an experimental static analysis tool
developed by our team, BassCheck[1]. This tool analyzes the locking APIs
to extract function pairs that can be concurrently executed, and then
analyzes the instructions in the paired functions to identify possible
concurrency bugs including data races and atomicity violations. The above
possible bug is reported when our tool analyzes the source code of
Linux 6.2.
To address this issue, it is proposed to add a spin lock pair in
mon_bin_vma_fault() to ensure atomicity. With this patch applied, our tool
never reports the possible bug, with the kernel configuration allyesconfig
for x86_64. Due to the lack of associated hardware, we cannot test the
patch in runtime testing, and just verify it according to the code logic.
[1] https://sites.google.com/view/basscheck/
Fixes: 19e6317d24c2 ("usb: mon: Fix a deadlock in usbmon between ...")
Cc: <stable@vger.kernel.org>
Signed-off-by: Gui-Dong Han <2045gemini@gmail.com>
Link: https://lore.kernel.org/r/20240105052412.9377-1-2045gemini@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-25 14:34:30 -08:00
..
accessibility
acpi
ACPI: LPIT: Avoid u32 multiplication overflow
2024-01-25 14:34:22 -08:00
amba
amba: bus: fix refcount leak
2023-09-23 10:59:52 +02:00
android
binder: fix unused alloc->free_async_space
2024-01-25 14:34:29 -08:00
ata
ata: pata_isapnp: Add missing error check for devm_ioport_map()
2023-12-08 08:44:23 +01:00
atm
atm: solos-pci: Fix potential deadlock on &tx_queue_lock
2023-12-20 15:41:15 +01:00
auxdisplay
base
devcoredump: Send uevent once devcd is ready
2023-12-13 18:18:18 +01:00
bcma
block
remove the sx8 block driver
2023-11-08 11:23:42 +01:00
bluetooth
Bluetooth: btmtkuart: fix recv_buf() return value
2024-01-25 14:34:26 -08:00
bus
bus: ti-sysc: Fix SYSC_QUIRK_SWSUP_SIDLE_ACT handling for uart wake-up
2023-10-10 21:46:39 +02:00
cdrom
char
hwrng: geode - fix accessing registers
2023-11-20 10:30:12 +01:00
clk
clk: si5341: fix an error code problem in si5341_output_clk_set_rate
2024-01-25 14:34:28 -08:00
clocksource
clocksource/drivers/timer-atmel-tcb: Fix initialization on SAM9 hardware
2023-11-28 16:50:13 +00:00
connector
counter
cpufreq
cpufreq: imx6q: Don't disable 792 Mhz OPP unnecessarily
2023-12-08 08:44:28 +01:00
cpuidle
crypto
crypto: sahara - do not resize req->src when doing hash operations
2024-01-25 14:34:24 -08:00
dax
dca
devfreq
PM / devfreq: Fix leak in devfreq_dev_release()
2023-09-23 10:59:54 +02:00
dio
dma
dmaengine: stm32-mdma: correct desc prep when channel running
2023-11-28 16:50:19 +00:00
dma-buf
dma-buf/sw_sync: Avoid recursive lock during fence signal
2023-08-30 16:27:28 +02:00
edac
EDAC/thunderx: Fix possible out-of-bounds string access
2024-01-25 14:34:21 -08:00
eisa
extcon
extcon: Fix kernel doc of property capability fields to avoid warnings
2023-07-27 08:37:20 +02:00
firewire
firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards
2024-01-15 18:25:27 +01:00
firmware
firmware: ti_sci: Fix an off-by-one in ti_sci_debugfs_create()
2024-01-25 14:34:25 -08:00
fpga
fsi
fsi: master-ast-cf: Add MODULE_FIRMWARE macro
2023-09-23 10:59:37 +02:00
gnss
gpio
gpiolib: sysfs: Fix error handling on failed export
2023-12-13 18:18:15 +01:00
gpu
gpu/drm/radeon: fix two memleaks in radeon_vm_init
2024-01-25 14:34:28 -08:00
greybus
hid
HID: hid-asus: add const to read-only outgoing usb buffer
2023-12-20 15:41:23 +01:00
hsi
hv
Drivers: hv: vmbus: Fix vmbus_wait_for_unload() to scan present CPUs
2023-06-28 10:18:36 +02:00
hwmon
hwmon: (acpi_power_meter) Fix 4.29 MW bug
2023-12-13 18:18:13 +01:00
hwspinlock
hwtracing
coresight: etm4x: Fix width of CCITMIN field
2024-01-25 14:34:21 -08:00
i2c
i2c: core: Fix atomic xfer check for non-preempt config
2024-01-15 18:25:27 +01:00
i3c
i3c: master: cdns: Fix reading status register
2023-11-28 16:50:19 +00:00
ide
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
idle
iio
iio: adc: ti_am335x_adc: Fix return value check of tiadc_request_dma()
2024-01-08 11:29:46 +01:00
infiniband
RDMA/usnic: Silence uninitialized symbol smatch warnings
2024-01-25 14:34:26 -08:00
input
Input: atkbd - use ab83 as id when skipping the getid command
2024-01-25 14:34:29 -08:00
interconnect
interconnect: Treat xlate() returning NULL node as an error
2024-01-08 11:29:45 +01:00
iommu
of/iommu: Make of_map_rid() PCI agnostic
2023-12-13 18:18:11 +01:00
ipack
irqchip
firmware: ti_sci: Replace HTTP links with HTTPS ones
2023-11-20 10:30:12 +01:00
isdn
mISDN: Update parameter type of dsp_cmx_send()
2023-08-16 18:19:23 +02:00
leds
leds: trigger: ledtrig-cpu:: Fix 'output may be truncated' issue for 'cpu'
2023-11-20 10:30:13 +01:00
lightnvm
macintosh
mailbox
mailbox: ti-msgmgr: Fill non-message tx data fields with 0x0
2023-07-27 08:37:23 +02:00
mcb
mcb: fix error handling for different scenarios when parsing
2023-11-28 16:50:19 +00:00
md
bcache: avoid NULL checking to c->root in run_cache_set()
2023-12-20 15:41:20 +01:00
media
media: dvbdev: drop refcount on error path in dvb_device_open()
2024-01-25 14:34:28 -08:00
memory
memory: brcmstb_dpfe: fix testing array offset after use
2023-07-27 08:37:14 +02:00
memstick
memstick r592: make memstick_debug_get_tpc_name() static
2023-07-27 08:37:10 +02:00
message
mfd
mfd: dln2: Fix double put in dln2_probe
2023-11-20 10:30:13 +01:00
misc
misc: st_core: Do not call kfree_skb() under spin_lock_irqsave()
2023-11-20 10:30:13 +01:00
mmc
mmc: sdhci_omap: Fix TI SoC dependencies
2024-01-25 14:34:28 -08:00
mtd
mtd: Fix gluebi NULL pointer dereference caused by ftl notifier
2024-01-25 14:34:23 -08:00
mux
net
xen-netback: don't produce zero-size SKB frags
2024-01-25 14:34:29 -08:00
nfc
nfcsim.c: Fix error checking for debugfs_create_dir
2023-06-28 10:18:41 +02:00
ntb
ntb: Fix calculation ntb_transport_tx_free_entry()
2023-09-23 10:59:55 +02:00
nubus
nvdimm
nd_btt: Make BTT lanes preemptible
2023-11-20 10:30:12 +01:00
nvme
nvme: introduce helper function to get ctrl state
2024-01-25 14:34:19 -08:00
nvmem
nvmem: imx: correct nregs for i.MX6UL
2023-11-08 11:23:37 +01:00
of
of: unittest: Fix of_count_phandle_with_args() expected value message
2024-01-25 14:34:29 -08:00
opp
OPP: Fix passing 0 to PTR_ERR in _opp_attach_genpd()
2023-09-23 10:59:40 +02:00
oprofile
parisc
parisc: iosapic.c: Fix sparse warnings
2023-10-10 21:46:39 +02:00
parport
parport: parport_serial: Add Brainboxes device IDs and geometry
2024-01-25 14:34:21 -08:00
pci
PCI: Disable ATS for specific Intel IPU E2000 devices
2024-01-15 18:25:29 +01:00
pcmcia
pcmcia: ds: fix possible name leak in error path in pcmcia_device_add()
2023-11-20 10:30:14 +01:00
perf
perf/smmuv3: Enable HiSilicon Erratum 162001900 quirk for HIP08/09
2023-09-23 11:00:03 +02:00
phy
phy: mapphone-mdm6600: Fix pinctrl_pm handling for sleep pins
2023-10-25 11:53:25 +02:00
pinctrl
pinctrl: lochnagar: Don't build on MIPS
2024-01-25 14:34:19 -08:00
platform
platform/x86: intel_telemetry: Fix kernel doc descriptions
2023-12-20 15:41:21 +01:00
pnp
power
power: supply: Fix logic checking if system is running from battery
2023-06-21 15:44:09 +02:00
powercap
powercap: RAPL: Fix CONFIG_IOSF_MBI dependency
2023-07-27 08:37:06 +02:00
pps
ps3
ptp
ptp: annotate data-race around q->head and q->tail
2023-11-28 16:50:16 +00:00
pwm
pwm: brcmstb: Utilize appropriate clock APIs in suspend/resume
2023-11-20 10:30:15 +01:00
rapidio
ras
regulator
regulator/core: Revert "fix kobject release warning and memory leak in regulator_register()"
2023-10-25 11:53:23 +02:00
remoteproc
reset
reset: hisilicon: hi6220: fix Wvoid-pointer-to-enum-cast warning
2024-01-25 14:34:20 -08:00
rpmsg
rpmsg: Fix possible refcount leak in rpmsg_register_device_override()
2023-11-08 11:23:40 +01:00
rtc
rtc: pcf85363: fix wrong mask/val parameters in regmap_update_bits call
2023-11-20 10:30:14 +01:00
s390
s390/scm: fix virtual vs physical address confusion
2024-01-25 14:34:20 -08:00
sbus
scsi
scsi: hisi_sas: Replace with standard error code return value
2024-01-25 14:34:25 -08:00
sfi
sh
siox
slimbus
soc
soc: qcom: llcc: Handle a second device without data corruption
2023-11-20 10:30:12 +01:00
soundwire
soundwire: stream: fix NULL pointer dereference for multi_link
2023-12-20 15:41:24 +01:00
spi
spi: sh-msiof: Enforce fixed DTDL for R-Car H3
2024-01-25 14:34:23 -08:00
spmi
ssb
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
staging
staging: rtl8712: fix race condition
2023-09-23 10:59:37 +02:00
target
scsi: target: core: Fix deadlock due to recursive locking
2023-10-10 21:46:43 +02:00
tc
tee
thermal
thermal: core: prevent potential string overflow
2023-11-20 10:30:09 +01:00
thunderbolt
tty
serial: 8250_omap: Add earlycon support for the AM654 UART controller
2023-12-13 18:18:16 +01:00
uio
uio: Fix use-after-free in uio_open
2024-01-25 14:34:21 -08:00
usb
usb: mon: Fix atomicity violation in mon_bin_vma_fault
2024-01-25 14:34:30 -08:00
vfio
vhost
treewide: Remove uninitialized_var() usage
2023-06-09 10:29:01 +02:00
video
fbdev: stifb: Make the STI next font pointer a 32-bit signed offset
2023-12-08 08:44:27 +01:00
virt
virtio
virtio-mmio: fix memory leak of vm_dev
2023-11-08 11:23:34 +01:00
visorbus
vlynq
vme
w1
w1: fix loop in w1_fini()
2023-07-27 08:37:19 +02:00
watchdog
watchdog: bcm2835_wdt: Fix WDIOC_SETTIMEOUT handling
2024-01-25 14:34:28 -08:00
xen
xen/events: fix delayed eoi list handling
2023-11-28 16:50:16 +00:00
zorro
Kconfig
Makefile