Skip to content
OpenAdvisories
Unscored CVE-2026-97603 EUVD-2026-86734GHSA-6g6r-xm94-6p2f

idpf: disable DIM work before freeing q_vectors

Published Sep 25, 2026 · Updated Oct 19, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: linux Package: linux Package: linux-6.12 Package: linux-allwinner-5.19 Package: linux-aws Package: linux-aws-5.0 Package: linux-aws-5.11 Package: linux-aws-5.13 Package: linux-aws-5.19 Package: linux-aws-5.3 Package: linux-aws-5.8 Package: linux-aws-6.14 Package: linux-aws-6.17 Package: linux-aws-6.2 Package: linux-aws-6.5 Package: linux-aws-6.8 Package: linux-aws-7.0 Package: linux-aws-fips Package: linux-azure Package: linux-azure-5.11 Package: linux-azure-5.13 Package: linux-azure-5.19 Package: linux-azure-5.3 Package: linux-azure-5.8 Package: linux-azure-6.11 Package: linux-azure-6.14 Package: linux-azure-6.17 Package: linux-azure-6.2 Package: linux-azure-6.5 Package: linux-azure-6.8 Package: linux-azure-7.0 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.19 Package: linux-azure-fde-6.14 Package: linux-azure-fde-6.17 Package: linux-azure-fde-6.2 Package: linux-azure-fde-6.8 Package: linux-azure-fde-7.0 Package: linux-azure-fips Package: linux-azure-nvidia Package: linux-azure-nvidia-6.14 Package: linux-bluefield Package: linux-fips Package: linux-gcp Package: linux-gcp-5.11 Package: linux-gcp-5.13 Package: linux-gcp-5.15 Package: linux-gcp-5.19 Package: linux-gcp-5.3 Package: linux-gcp-5.8 Package: linux-gcp-6.11 Package: linux-gcp-6.14 Package: linux-gcp-6.17 Package: linux-gcp-6.2 Package: linux-gcp-6.5 Package: linux-gcp-6.8 Package: linux-gcp-7.0 Package: linux-gcp-fips Package: linux-gke Package: linux-gke-4.15 Package: linux-gke-5.15 Package: linux-gke-5.4 Package: linux-gkeop Package: linux-gkeop-5.15 Package: linux-gkeop-5.4 Package: linux-hwe Package: linux-hwe-5.11 Package: linux-hwe-5.13 Package: linux-hwe-5.19 Package: linux-hwe-5.8 Package: linux-hwe-6.11 Package: linux-hwe-6.14 Package: linux-hwe-6.17 Package: linux-hwe-6.2 Package: linux-hwe-6.5 Package: linux-hwe-6.8 Package: linux-hwe-7.0 Package: linux-hwe-edge Package: linux-ibm Package: linux-ibm-6.8 Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-lowlatency Package: linux-lowlatency-hwe-5.19 Package: linux-lowlatency-hwe-6.11 Package: linux-lowlatency-hwe-6.2 Package: linux-lowlatency-hwe-6.5 Package: linux-lowlatency-hwe-6.8 Package: linux-nvidia Package: linux-nvidia-6.11 Package: linux-nvidia-6.17 Package: linux-nvidia-6.2 Package: linux-nvidia-6.5 Package: linux-nvidia-6.8 Package: linux-nvidia-7.0 Package: linux-nvidia-bos Package: linux-nvidia-lowlatency Package: linux-nvidia-tegra Package: linux-oem Package: linux-oem-5.10 Package: linux-oem-5.13 Package: linux-oem-5.14 Package: linux-oem-5.17 Package: linux-oem-5.6 Package: linux-oem-6.0 Package: linux-oem-6.1 Package: linux-oem-6.11 Package: linux-oem-6.14 Package: linux-oem-6.17 Package: linux-oem-6.5 Package: linux-oem-6.8 Package: linux-oem-7.0 Package: linux-oracle Package: linux-oracle-5.0 Package: linux-oracle-5.11 Package: linux-oracle-5.13 Package: linux-oracle-5.3 Package: linux-oracle-5.8 Package: linux-oracle-6.14 Package: linux-oracle-6.17 Package: linux-oracle-6.5 Package: linux-oracle-6.8 Package: linux-oracle-7.0 Package: linux-raspi Package: linux-raspi-realtime Package: linux-raspi2 Package: linux-realtime Package: linux-realtime-6.14 Package: linux-realtime-6.17 Package: linux-realtime-6.8 Package: linux-riscv Package: linux-riscv-5.11 Package: linux-riscv-5.19 Package: linux-riscv-5.8 Package: linux-riscv-6.14 Package: linux-riscv-6.17 Package: linux-riscv-6.5 Package: linux-riscv-6.8 Package: linux-riscv-7.0 Package: linux-starfive-5.19 Package: linux-starfive-6.2 Package: linux-starfive-6.5 Package: linux-vmware Package: linux-xilinx Platform: Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

In the Linux kernel, the following vulnerability has been resolved:

idpf: disable DIM work before freeing q_vectors

idpf never drains the Tx/Rx DIM works before freeing the memory they
live in. tx_dim and rx_dim are embedded in struct idpf_q_vector, they
are queued from the NAPI poll via net_dim(), and idpf_vport_intr_rel()
ends with kfree(rsrc->q_vectors). Nothing in the driver cancels them.

idpf_tx_dim_work() and idpf_rx_dim_work() then run on freed memory:
idpf_vport_intr_write_itr() writes the ITR register through
q_vector->intr_reg.tx_itr / rx_itr, void __iomem pointers loaded out of
the freed q_vector. No configuration is needed to get there --
IDPF_ITR_IS_DYNAMIC() is defined as (itr_mode) and idpf_vport_alloc()
initialises both modes to IDPF_ITR_DYNAMIC.

Draining after idpf_vport_intr_napi_dis_all() is not enough on its own.
idpf_net_dim() is called from inside the
"if (napi_complete_done(napi, work_done))" branch of the poll, and
napi_complete_done() has already cleared NAPIF_STATE_SCHED by then.
napi_disable_locked() waits only while (val & (NAPIF_STATE_SCHED |
NAPIF_STATE_NPSVC)), so napi_disable() can return while the poll tail is
still queueing the work, and a plain cancel_work_sync() would be
re-armed behind the drain.

Use disable_work_sync(): schedule_work() on a work with a non-zero
disable count is dropped by clear_pending_if_disabled() before
__queue_work() is reached.

Move idpf_init_dim() to idpf_vport_intr_alloc() so the works are
initialised on every path that can reach the drain -- the three
"goto intr_deinit" sites between idpf_vport_intr_init() and
idpf_vport_intr_ena() get there without the enable side having run.
Nothing re-enables them: rsrc->q_vectors is freed on every exit from
idpf_vport_open() and on every idpf_vport_stop(), so the count dies with
the object.

It is a race, not a deterministic failure -- net_dim() only schedules
once DIM_NEVENTS events have accumulated and the profile index changes.
A KASAN ifup/ifdown loop under load is the way to see it.

Affected products

VendorProductAffectedFixed
Linux Linux 6.7 6.12.112

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 linux 7.2.7-1 —
Debian 13 linux 6.12.113-1 —
Debian 12 linux-6.12 6.12.113-1~deb12u1 —
ReleasePackageFixed inAdvisory
Ubuntu Nvidia-BlueField 24.04 LTS linux-bluefield No fix yet —
Ubuntu 26.04 LTS linux 7.0.0-42.42 USN-8959-1
Ubuntu 26.04 LTS linux-aws 7.0.0-1016.17 USN-8959-1
Ubuntu 26.04 LTS linux-azure 7.0.0-1020.21 USN-9019-1
Ubuntu 26.04 LTS linux-azure-fde 7.0.0-1019.19 USN-9020-1
Ubuntu 26.04 LTS linux-gcp 7.0.0-1016.18 USN-8959-1
Ubuntu 26.04 LTS linux-gke 7.0.0-1010.11 USN-9020-1
Ubuntu 26.04 LTS linux-ibm +1 7.0.0-1017.17 USN-8960-1, USN-8959-1
Ubuntu 26.04 LTS linux-nvidia +1 No fix yet —
Ubuntu 26.04 LTS linux-oracle 7.0.0-1015.16 USN-8959-1
Ubuntu 26.04 LTS linux-raspi 7.0.0-1023.23 USN-9021-1
Ubuntu 26.04 LTS linux-realtime 7.0.0-43.43.1 USN-9020-1
Ubuntu 26.04 LTS linux-riscv 7.0.0-42.42.1 —
Ubuntu 24.04 LTS linux +46 No fix yet —
Ubuntu 24.04 LTS linux-aws-7.0 7.0.0-1017.18~24.04.1 USN-9020-1
Ubuntu 24.04 LTS linux-azure-fde-7.0 7.0.0-1019.19~24.04.1 USN-9020-1
Ubuntu 24.04 LTS linux-gcp-7.0 7.0.0-1017.19~24.04.1 USN-9020-1
Ubuntu 24.04 LTS linux-hwe-7.0 7.0.0-42.42~24.04.1 USN-8959-1
Ubuntu 24.04 LTS linux-oracle-7.0 7.0.0-1016.18~24.04.1 USN-9020-1
Ubuntu 24.04 LTS linux-riscv-7.0 7.0.0-42.42.1~24.04.1 —
Ubuntu 22.04 LTS linux-gcp +44 No fix yet —
Ubuntu 20.04 LTS linux-gke +28 No fix yet —
Show 7 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu 18.04 LTS linux-gcp +14 No fix yet —
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Ubuntu Pro Realtime 24.04 LTS linux-realtime +3 No fix yet —
Ubuntu Pro Realtime 22.04 LTS linux-realtime-6.8 No fix yet —
Ubuntu Pro FIPS-updates 24.04 LTS linux-fips +3 No fix yet —
Ubuntu Pro FIPS-updates 22.04 LTS linux-gcp-fips No fix yet —
Ubuntu Pro 20.04 LTS linux-gcp-5.15 No fix yet —
ReleasePackageFixed inAdvisory
SLES for SAP 16.0 kernel-64kb +8 6.12.0-160000.41.1 SUSE-SU-2026:24662-1
SLES for SAP 16.0 kernel-default-base 6.12.0-160000.41.1.160000.2.32 SUSE-SU-2026:24662-1
SLES 16.0 kernel-64kb +8 6.12.0-160000.41.1 SUSE-SU-2026:24662-1, SUSE-SU-2026:24651-1
SLES 16.0 kernel-default-base 6.12.0-160000.41.1.160000.2.32 SUSE-SU-2026:24662-1
SLE Micro 6.2 kernel-default-base 6.12.0-160000.41.1.160000.2.32 SUSE-SU-2026:24643-1
SLE Micro 6.2 kernel-rt +5 6.12.0-160000.41.1 SUSE-SU-2026:24648-1, SUSE-SU-2026:24643-1
Show 2 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
SLE Micro 6.1 kernel-default-base 6.4.0-159998.55.1.159998.21.41 SUSE-SU-2026:24619-1
SLE Micro 6.1 kernel-source +2 6.4.0-159998.55.1 SUSE-SU-2026:24619-1
SLE Micro 6.0 kernel-default-base 6.4.0-159998.55.1.159998.21.42 SUSE-SU-2026:24550-1
SLE Micro 6.0 kernel-source +2 6.4.0-159998.55.1 SUSE-SU-2026:24550-1
ReleasePackageFixed inAdvisory
openSUSE Tumbleweed kernel-source 7.2.9-1.1 openSUSE-SU-2026:12074-1

Oracle Linux

ReleasePackageFixed inAdvisory
Oracle Linux 9 kernel-uek +34 6.12.0-208.112.5.el10uek ELSA-2026-500572

Advisories 14

References