android_kernel_motorola_sm6375/drivers
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Duoming Zhou fde6e73189 cnic: Fix use-after-free bugs in cnic_delete_task
[ Upstream commit cfa7d9b1e3a8604afc84e9e51d789c29574fb216 ]

The original code uses cancel_delayed_work() in cnic_cm_stop_bnx2x_hw(),
which does not guarantee that the delayed work item 'delete_task' has
fully completed if it was already running. Additionally, the delayed work
item is cyclic, the flush_workqueue() in cnic_cm_stop_bnx2x_hw() only
blocks and waits for work items that were already queued to the
workqueue prior to its invocation. Any work items submitted after
flush_workqueue() is called are not included in the set of tasks that the
flush operation awaits. This means that after the cyclic work items have
finished executing, a delayed work item may still exist in the workqueue.
This leads to use-after-free scenarios where the cnic_dev is deallocated
by cnic_free_dev(), while delete_task remains active and attempt to
dereference cnic_dev in cnic_delete_task().

A typical race condition is illustrated below:

CPU 0 (cleanup)              | CPU 1 (delayed work callback)
cnic_netdev_event()          |
  cnic_stop_hw()             | cnic_delete_task()
    cnic_cm_stop_bnx2x_hw()  | ...
      cancel_delayed_work()  | /* the queue_delayed_work()
      flush_workqueue()      |    executes after flush_workqueue()*/
                             | queue_delayed_work()
  cnic_free_dev(dev)//free   | cnic_delete_task() //new instance
                             |   dev = cp->dev; //use

Replace cancel_delayed_work() with cancel_delayed_work_sync() to ensure
that the cyclic delayed work item is properly canceled and that any
ongoing execution of the work item completes before the cnic_dev is
deallocated. Furthermore, since cancel_delayed_work_sync() uses
__flush_work(work, true) to synchronously wait for any currently
executing instance of the work item to finish, the flush_workqueue()
becomes redundant and should be removed.

This bug was identified through static analysis. To reproduce the issue
and validate the fix, I simulated the cnic PCI device in QEMU and
introduced intentional delays — such as inserting calls to ssleep()
within the cnic_delete_task() function — to increase the likelihood
of triggering the bug.

Fixes: fdf24086f4 ("cnic: Defer iscsi connection cleanup")
Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-10-02 13:34:31 +02:00
..
accessibility
acpi ACPI: processor: idle: Check acpi_fetch_acpi_dev() return value 2025-08-28 16:21:33 +02:00
amba
android
ata ata: Fix SATA_MOBILE_LPM_POLICY description in Kconfig 2025-08-28 16:21:35 +02:00
atm atm: atmtcp: Prevent arbitrary write in atmtcp_recv_control(). 2025-09-04 14:05:54 +02:00
auxdisplay
base pmdomain: governor: Consider CPU latency tolerance from pm_domain_cpu_gov 2025-08-28 16:21:34 +02:00
bcma
block drbd: add missing kref_get in handle_write_conflicts 2025-08-28 16:21:24 +02:00
bluetooth Bluetooth: btrtl: Prevent potential NULL dereference 2025-05-02 07:39:19 +02:00
bus Revert "bus: ti-sysc: Probe for l4_wkup and l4_cfg interconnect devices first" 2025-06-27 11:02:55 +01:00
cdrom
char ipmi: Fix strcpy source and destination the same 2025-08-28 16:21:29 +02:00
clk clk: sunxi-ng: v3s: Fix de clock definition 2025-08-28 16:21:20 +02:00
clocksource clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable() 2025-06-04 14:32:29 +02:00
connector
counter counter: stm32-lptimer-cnt: fix error handling when enabling 2025-04-10 14:29:39 +02:00
cpufreq cpufreq: armada-8k: Fix off by one in armada_8k_cpufreq_free_table() 2025-08-28 16:21:30 +02:00
cpuidle cpuidle: menu: Avoid discarding useful information 2025-06-04 14:32:32 +02:00
crypto crypto: qat - fix seq_file position update in adf_ring_next() 2025-08-28 16:21:21 +02:00
dax
dca
devfreq
dio
dma dmaengine: qcom: bam_dma: Fix DT error handling for num-channels/ees 2025-10-02 13:34:29 +02:00
dma-buf dma-buf: fix timeout handling in dma_resv_wait_timeout v2 2025-07-17 18:25:04 +02:00
edac EDAC/altera: Delete an inappropriate dma_free_coherent() call 2025-10-02 13:34:27 +02:00
eisa
extcon
firewire
firmware firmware: psci: Fix refcount leak in psci_dt_init 2025-06-27 11:02:46 +01:00
fpga fpga: zynq_fpga: Fix the wrong usage of dma_map_sgtable() 2025-08-28 16:21:32 +02:00
fsi
gnss
gpio gpio: pca953x: fix IRQ storm on system wake up 2025-09-09 18:44:00 +02:00
gpu drm/amdgpu: drop hw access in non-DC audio fini 2025-09-09 18:43:59 +02:00
greybus
hid HID: hid-ntrig: fix unable to handle page fault in ntrig_report_version() 2025-09-04 14:05:56 +02:00
hsi HSI: ssi_protocol: Fix use after free vulnerability in ssi_protocol Driver Due to Race Condition 2025-05-02 07:39:18 +02:00
hv Drivers: hv: vmbus: Don't release fb_mmio resource in vmbus_free_mmio() 2025-04-10 14:29:35 +02:00
hwmon hwmon: (occ) fix unaligned accesses 2025-06-27 11:02:57 +01:00
hwspinlock
hwtracing coresight: catu: Fix number of pages while using 64k pages 2025-04-10 14:29:41 +02:00
i2c i2c: qup: jump out of the loop in case of timeout 2025-08-28 16:21:17 +02:00
i3c i3c: don't fail if GETHDRCAP is unsupported 2025-08-28 16:21:29 +02:00
ide
idle
iio iio: light: opt3001: fix deadlock due to concurrent flag access 2025-09-09 18:44:00 +02:00
infiniband RDMA: hfi1: fix possible divide-by-zero in find_hw_thread_mask() 2025-08-28 16:21:28 +02:00
input Input: xpad - set correct controller type for Acer NGR200 2025-08-28 16:21:14 +02:00
interconnect
iommu iommu/amd: Fix potential buffer overflow in parse_ivrs_acpihid 2025-06-04 14:32:26 +02:00
ipack
irqchip irqchip/gic-v2m: Prevent use after free of gicv2m_get_fwnode() 2025-06-04 14:32:25 +02:00
isdn mISDN: Fix memory leak in dsp_hwec_enable() 2025-09-09 18:43:57 +02:00
leds
lightnvm
macintosh
mailbox mailbox: Not protect module_put with spin_lock_irqsave 2025-07-17 18:24:49 +02:00
mcb mcb: fix a double free bug in chameleon_parse_gdd() 2025-05-02 07:39:26 +02:00
md md/raid1: Fix stack memory use after return in raid1_reshape 2025-07-17 18:25:04 +02:00
media media: venus: hfi: explicitly release IRQ during teardown 2025-08-28 16:21:35 +02:00
memory
memstick memstick: Fix deadlock by moving removing flag earlier 2025-08-28 16:21:32 +02:00
message
mfd mfd: max14577: Fix wakeup source leaks on device unbind 2025-07-17 18:24:49 +02:00
misc misc: rtsx: usb: Ensure mmc child device is active when card is present 2025-08-28 16:21:30 +02:00
mmc mmc: rtsx_usb_sdmmc: Fix error-path in sd_set_power_mode() 2025-08-28 16:21:25 +02:00
mtd mtd: nand: raw: atmel: Respect tAR, tCLR in read setup timing 2025-10-02 13:34:28 +02:00
mux
net cnic: Fix use-after-free bugs in cnic_delete_task 2025-10-02 13:34:31 +02:00
nfc
ntb ntb: reduce stack usage in idt_scan_mws 2025-05-02 07:39:28 +02:00
nubus
nvdimm libnvdimm/labels: Fix divide error in nd_label_data_init() 2025-06-04 14:32:30 +02:00
nvme nvmet-tcp: don't restore null sk_state_change 2025-06-04 14:32:35 +02:00
nvmem
of of: module: add buffer overflow check in of_modalias() 2025-06-04 14:32:25 +02:00
opp
oprofile
parisc
parport parport_pc: add support for ASIX AX99100 2025-03-13 12:43:19 +01:00
pci PCI/ACPI: Fix runtime PM ref imbalance on Hot-Plug Capable ports 2025-08-28 16:21:33 +02:00
pcmcia pcmcia: omap_cf: Mark driver struct with __refdata to prevent section mismatch 2025-10-02 13:34:30 +02:00
perf perf: arm_pmu: Don't disable counter in armpmu_add() 2025-05-02 07:39:09 +02:00
phy phy: ti-pipe3: fix device leak at unbind 2025-10-02 13:34:30 +02:00
pinctrl pinctrl: STMFX: add missing HAS_IOMEM dependency 2025-09-04 14:05:53 +02:00
platform platform/x86: thinkpad_acpi: Handle KCOV __init vs inline mismatches 2025-08-28 16:21:25 +02:00
pnp
power power: supply: max14577: Handle NULL pdata when CONFIG_OF is not set 2025-08-28 16:21:20 +02:00
powercap powercap: call put_device() on an error path in powercap_register_control_type() 2025-04-10 14:29:36 +02:00
pps pps: fix poll support 2025-08-28 16:21:18 +02:00
ps3
ptp
pwm pwm: mediatek: Fix duty and period setting 2025-08-28 16:21:35 +02:00
rapidio drivers/rapidio/rio_cm.c: prevent possible heap overwrite 2025-06-27 11:02:56 +01:00
ras
regulator regulator: core: fix NULL dereference on unbind due to stale coupling data 2025-08-28 16:21:17 +02:00
remoteproc
reset
rpmsg rpmsg: qcom_smd: Fix uninitialized return variable in __qcom_smd_send() 2025-06-27 11:02:48 +01:00
rtc rtc: ds1307: handle oscillator stop flag (OSF) for ds1341 2025-08-28 16:21:35 +02:00
s390 scsi: s390: zfcp: Ensure synchronous unit_add 2025-06-27 11:02:56 +01:00
sbus
scsi scsi: lpfc: Fix buffer free/clear order in deferred receive path 2025-09-09 18:43:59 +02:00
sfi
sh
siox
slimbus slimbus: messaging: Free transaction ID in delayed interrupt scenario 2025-03-13 12:43:33 +01:00
soc soc: qcom: mdt_loader: Deal with zero e_shentsize 2025-10-02 13:34:30 +02:00
soundwire soundwire: stream: restore params when prepare ports fail 2025-08-28 16:21:21 +02:00
spi spi: spi-fsl-lpspi: Reset FIFO and disable module on transfer abort 2025-09-09 18:44:01 +02:00
spmi
ssb
staging comedi: Fail COMEDI_INSNLIST ioctl if n_insns is too large 2025-08-28 16:21:33 +02:00
target scsi: target: iscsi: Fix timeout on deleted connection 2025-06-04 14:32:29 +02:00
tc
tee tee: Prevent size calculation wraparound on 32-bit kernels 2025-06-27 11:02:55 +01:00
thermal thermal: sysfs: Return ENODATA instead of EAGAIN for reads 2025-08-28 16:21:25 +02:00
thunderbolt thunderbolt: Fix copy+paste error in match_service_id() 2025-08-28 16:21:30 +02:00
tty tty: hvc_console: Call hvc_kick in hvc_write unconditionally 2025-10-02 13:34:28 +02:00
uio uio_hv_generic: Use correct size for interrupt and monitor pages 2025-06-27 11:02:52 +01:00
usb USB: serial: option: add Telit Cinterion LE910C4-WWX new compositions 2025-10-02 13:34:28 +02:00
vfio
vhost vhost/net: Protect ubufs with rcu read lock in vhost_net_ubuf_put() 2025-09-04 14:05:53 +02:00
video Revert "vgacon: Add check for vc_origin address range in vgacon_scroll()" 2025-08-28 16:21:31 +02:00
virt
virtio
visorbus
vlynq
vme
w1
watchdog watchdog: dw_wdt: Fix default timeout 2025-08-28 16:21:27 +02:00
xen xen/swiotlb: relax alignment requirements 2025-06-04 14:32:37 +02:00
zorro
Kconfig
Makefile