Alex Williamson
07afdfd8a6
vfio/platform: Create persistent IRQ handlers
...
[ Upstream commit 675daf435e9f8e5a5eab140a9864dfad6668b375 ]
The vfio-platform SET_IRQS ioctl currently allows loopback triggering of
an interrupt before a signaling eventfd has been configured by the user,
which thereby allows a NULL pointer dereference.
Rather than register the IRQ relative to a valid trigger, register all
IRQs in a disabled state in the device open path. This allows mask
operations on the IRQ to nest within the overall enable state governed
by a valid eventfd signal. This decouples @masked, protected by the
@locked spinlock from @trigger, protected via the @igate mutex.
In doing so, it's guaranteed that changes to @trigger cannot race the
IRQ handlers because the IRQ handler is synchronously disabled before
modifying the trigger, and loopback triggering of the IRQ via ioctl is
safe due to serialization with trigger changes via igate.
For compatibility, request_irq() failures are maintained to be local to
the SET_IRQS ioctl rather than a fatal error in the open device path.
This allows, for example, a userspace driver with polling mode support
to continue to work regardless of moving the request_irq() call site.
This necessarily blocks all SET_IRQS access to the failed index.
Cc: Eric Auger <eric.auger@redhat.com>
Cc: <stable@vger.kernel.org>
Fixes: 57f972e2b3 ("vfio/platform: trigger an interrupt via eventfd")
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Link: https://lore.kernel.org/r/20240308230557.805580-7-alex.williamson@redhat.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-04-13 12:51:34 +02:00
..
accessibility
acpi
ACPI: scan: Fix device check notification handling
2024-03-26 18:22:16 -04:00
amba
amba: bus: fix refcount leak
2023-09-23 10:59:52 +02:00
android
binder: signal epoll threads of self-work
2024-02-23 08:25:11 +01:00
ata
ahci: asm1064: asm1166: don't limit reported ports
2024-04-13 12:51:28 +02:00
atm
atm: idt77252: fix a memleak in open_card_ubr0
2024-02-23 08:25:06 +01:00
auxdisplay
base
PM: sleep: wakeirq: fix wake irq warning in system suspend
2024-04-13 12:51:25 +02:00
bcma
block
loop: loop_set_status_from_info() check before assignment
2024-04-13 12:51:30 +02:00
bluetooth
Bluetooth: btmtkuart: fix recv_buf() return value
2024-01-25 14:34:26 -08:00
bus
bus: tegra-aconnect: Update dependency to ARCH_TEGRA
2024-03-26 18:22:15 -04:00
cdrom
char
hwrng: core - Fix page fault dead lock on mmap-ed hwrng
2024-02-23 08:24:48 +01:00
clk
clk: qcom: mmcc-msm8974: fix terminating of frequency table arrays
2024-04-13 12:51:24 +02: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: qat - resolve race condition during AER recovery
2024-04-13 12:51:23 +02:00
dax
dca
devfreq
PM / devfreq: Fix leak in devfreq_dev_release()
2023-09-23 10:59:54 +02:00
dio
dma
dmaengine: tegra210-adma: Update dependency to ARCH_TEGRA
2024-03-26 18:22:19 -04:00
dma-buf
edac
EDAC/thunderx: Fix possible out-of-bounds string access
2024-01-25 14:34:21 -08:00
eisa
extcon
firewire
firewire: core: use long bus reset on gap count error
2024-03-26 18:22:13 -04:00
firmware
efivarfs: Request at most 512 bytes for variable names
2024-04-13 12:51:31 +02:00
fpga
fsi
gnss
gpio
gpio: 74x164: Enable output pins after registers are reset
2024-03-06 14:36:10 +00:00
gpu
drm/vc4: hdmi: do not return negative values from .get_modes()
2024-04-13 12:51:27 +02:00
greybus
hid
HID: multitouch: Add required quirk for Synaptics 0xcddc device
2024-03-26 18:22:12 -04:00
hsi
hv
hwmon
hwmon: (amc6821) add of_match table
2024-04-13 12:51:26 +02:00
hwspinlock
hwtracing
coresight: etm4x: Fix width of CCITMIN field
2024-01-25 14:34:21 -08:00
i2c
i2c: i801: Fix block process call transactions
2024-02-23 08:25:10 +01:00
i3c
i3c: master: cdns: Update maximum prescaler value for i2c clock
2024-02-23 08:25:02 +01:00
ide
idle
iio
iio: magnetometer: rm3100: add boundary check for the value read from RM3100_REG_TMRC
2024-02-23 08:25:11 +01:00
infiniband
RDMA/device: Fix a race between mad_client and cm_client init
2024-03-26 18:22:23 -04:00
input
Input: gpio_keys_polled - suppress deferred probe error for gpio
2024-03-26 18:22:13 -04:00
interconnect
interconnect: Treat xlate() returning NULL node as an error
2024-01-08 11:29:45 +01:00
iommu
iommu/amd: Mark interrupt as managed
2024-03-26 18:22:15 -04:00
ipack
irqchip
irqchip/irq-brcmstb-l2: Add write memory barrier before exit
2024-02-23 08:25:13 +01:00
isdn
leds
leds: trigger: panic: Don't register panic notifier if creating the trigger failed
2024-02-23 08:25:02 +01:00
lightnvm
macintosh
mailbox
mcb
mcb: fix error handling for different scenarios when parsing
2023-11-28 16:50:19 +00:00
md
dm integrity: fix out-of-range warning
2024-04-13 12:51:33 +02:00
media
media: xc4000: Fix atomicity violation in xc4000_get_frequency
2024-04-13 12:51:22 +02:00
memory
memstick
message
mfd
mfd: altera-sysmgr: Call of_node_put() only when of_parse_phandle() takes a ref
2024-03-26 18:22:21 -04:00
misc
misc: fastrpc: Mark all sessions as invalid in cb_remove
2024-02-23 08:25:11 +01:00
mmc
mmc: core: Avoid negative index with array access
2024-04-13 12:51:31 +02:00
mtd
mtd: rawnand: meson: fix scrambling mode value in command macro
2024-04-13 12:51:23 +02:00
mux
net
r8169: fix issue caused by buggy BIOS on certain boards with RTL8168d
2024-04-13 12:51:33 +02:00
nfc
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
nvmet-fc: abort command when there is no binding
2024-03-01 13:13:34 +01:00
nvmem
nvmem: meson-efuse: fix function pointer type mismatch
2024-04-13 12:51:26 +02:00
of
of: gpio unittest kfree() wrong object
2024-02-23 08:25:15 +01:00
opp
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/PM: Drain runtime-idle callbacks before driver removal
2024-04-13 12:51:25 +02: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: ti: phy-omap-usb2: Fix NULL pointer dereference for SRP
2024-02-23 08:25:06 +01:00
pinctrl
pinctrl: rockchip: Fix refcount leak in rockchip_pinctrl_parse_groups
2024-03-01 13:13:35 +01:00
platform
platform/x86: intel_telemetry: Fix kernel doc descriptions
2023-12-20 15:41:21 +01:00
pnp
PNP: ACPI: fix fortify warning
2024-02-23 08:24:54 +01:00
power
power: supply: bq27xxx-i2c: Do not free non existing IRQ
2024-03-06 14:36:09 +00:00
powercap
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: pwm-regulator: Add validity checks in continuous .get_voltage
2024-03-01 13:13:34 +01:00
remoteproc
reset
reset: hisilicon: hi6220: fix Wvoid-pointer-to-enum-cast warning
2024-01-25 14:34:20 -08:00
rpmsg
rpmsg: virtio: Free driver_override when rpmsg_remove()
2024-02-23 08:24:48 +01:00
rtc
rtc: mt6397: select IRQ_DOMAIN instead of depending on it
2024-03-26 18:22:24 -04:00
s390
s390/zcrypt: fix reference counting on zcrypt card objects
2024-04-13 12:51:27 +02:00
sbus
scsi
scsi: lpfc: Correct size for wqe for memset()
2024-04-13 12:51:32 +02:00
sfi
sh
siox
slimbus
slimbus: core: Remove usage of the deprecated ida_simple_xx() API
2024-04-13 12:51:26 +02:00
soc
soc: fsl: qbman: Use raw spinlock for cgr_lock
2024-04-13 12:51:27 +02:00
soundwire
soundwire: stream: fix NULL pointer dereference for multi_link
2023-12-20 15:41:24 +01:00
spi
spi: spi-mt65xx: Fix NULL pointer access in interrupt handler
2024-03-26 18:22:25 -04:00
spmi
ssb
staging
comedi: comedi_test: Prevent timers rescheduling during deletion
2024-04-13 12:51:28 +02:00
target
scsi: target: core: Add TMF to tmr_list handling
2024-03-01 13:13:33 +01:00
tc
tee
thermal
thermal: core: prevent potential string overflow
2023-11-20 10:30:09 +01:00
thunderbolt
tty
vt: fix memory overlapping when deleting chars in the buffer
2024-04-13 12:51:31 +02:00
uio
uio: Fix use-after-free in uio_open
2024-01-25 14:34:21 -08:00
usb
USB: core: Fix deadlock in usb_deauthorize_interface()
2024-04-13 12:51:32 +02:00
vfio
vfio/platform: Create persistent IRQ handlers
2024-04-13 12:51:34 +02:00
vhost
vhost: use kzalloc() instead of kmalloc() followed by memset()
2024-02-23 08:25:08 +01:00
video
backlight: lp8788: Fully initialize backlight_properties during probe
2024-03-26 18:22:23 -04:00
virt
virtio
virtio-mmio: fix memory leak of vm_dev
2023-11-08 11:23:34 +01:00
visorbus
vlynq
vme
w1
watchdog
watchdog: stm32_iwdg: initialize default timeout
2024-03-26 18:22:24 -04:00
xen
xen/events: close evtchn after mapping cleanup
2024-04-13 12:51:29 +02:00
zorro
Kconfig
Makefile