In the Linux kernel, the following vulnerability has been resolved:
ice: protect XDP configuration with a mutex
The main threat to data consistency in ice_xdp() is a possible asynchronous PF reset. It can be triggered by a user or by TX timeout handler.
XDP setup and PF reset code access the same resources in the following sections: * ice_vsi_close() in ice_prepare_for_reset() - already rtnl-locked * ice_vsi_rebuild() for the PF VSI - not protected * ice_vsi_open() - already rtnl-locked
With an unfortunate timing, such accesses can result in a crash such as the one below:
[ +1.999878] ice 0000:b1:00.0: Registered XDP mem model MEM_TYPE_XSK_BUFF_POOL on Rx ring 14 [ +2.002992] ice 0000:b1:00.0: Registered XDP mem model MEM_TYPE_XSK_BUFF_POOL on Rx ring 18 [Mar15 18:17] ice 0000:b1:00.0 ens801f0np0: NETDEV WATCHDOG: CPU: 38: transmit queue 14 timed out 80692736 ms [ +0.000093] ice 0000:b1:00.0 ens801f0np0: tx_timeout: VSI_num: 6, Q 14, NTC: 0x0, HW_HEAD: 0x0, NTU: 0x0, INT: 0x4000001 [ +0.000012] ice 0000:b1:00.0 ens801f0np0: tx_timeout recovery level 1, txqueue 14 [ +0.394718] ice 0000:b1:00.0: PTP reset successful [ +0.006184] BUG: kernel NULL pointer dereference, address: 0000000000000098 [ +0.000045] #PF: supervisor read access in kernel mode [ +0.000023] #PF: error_code(0x0000) - not-present page [ +0.000023] PGD 0 P4D 0 [ +0.000018] Oops: 0000 [#1] PREEMPT SMP NOPTI [ +0.000023] CPU: 38 PID: 7540 Comm: kworker/38:1 Not tainted 6.8.0-rc7 #1 [ +0.000031] Hardware name: Intel Corporation S2600WFT/S2600WFT, BIOS SE5C620.86B.02.01.0014.082620210524 08/26/2021 [ +0.000036] Workqueue: ice ice_service_task [ice] [ +0.000183] RIP: 0010:ice_clean_tx_ring+0xa/0xd0 [ice] [...] [ +0.000013] Call Trace: [ +0.000016] <TASK> [ +0.000014] ? __die+0x1f/0x70 [ +0.000029] ? page_fault_oops+0x171/0x4f0 [ +0.000029] ? schedule+0x3b/0xd0 [ +0.000027] ? exc_page_fault+0x7b/0x180 [ +0.000022] ? asm_exc_page_fault+0x22/0x30 [ +0.000031] ? ice_clean_tx_ring+0xa/0xd0 [ice] [ +0.000194] ice_free_tx_ring+0xe/0x60 [ice] [ +0.000186] ice_destroy_xdp_rings+0x157/0x310 [ice] [ +0.000151] ice_vsi_decfg+0x53/0xe0 [ice] [ +0.000180] ice_vsi_rebuild+0x239/0x540 [ice] [ +0.000186] ice_vsi_rebuild_by_type+0x76/0x180 [ice] [ +0.000145] ice_rebuild+0x18c/0x840 [ice] [ +0.000145] ? delay_tsc+0x4a/0xc0 [ +0.000022] ? delay_tsc+0x92/0xc0 [ +0.000020] ice_do_reset+0x140/0x180 [ice] [ +0.000886] ice_service_task+0x404/0x1030 [ice] [ +0.000824] process_one_work+0x171/0x340 [ +0.000685] worker_thread+0x277/0x3a0 [ +0.000675] ? preempt_count_add+0x6a/0xa0 [ +0.000677] ? _raw_spin_lock_irqsave+0x23/0x50 [ +0.000679] ? __pfx_worker_thread+0x10/0x10 [ +0.000653] kthread+0xf0/0x120 [ +0.000635] ? __pfx_kthread+0x10/0x10 [ +0.000616] ret_from_fork+0x2d/0x50 [ +0.000612] ? __pfx_kthread+0x10/0x10 [ +0.000604] ret_from_fork_asm+0x1b/0x30 [ +0.000604] </TASK>
The previous way of handling this through returning -EBUSY is not viable, particularly when destroying AF_XDP socket, because the kernel proceeds with removal anyway.
There is plenty of code between those calls and there is no need to create a large critical section that covers all of them, same as there is no need to protect ice_vsi_rebuild() with rtnl_lock().
Add xdp_state_lock mutex to protect ice_vsi_rebuild() and ice_xdp().
Leaving unprotected sections in between would result in two states that have to be considered: 1. when the VSI is closed, but not yet rebuild 2. when VSI is already rebuild, but not yet open
The latter case is actually already handled through !netif_running() case, we just need to adjust flag checking a little. The former one is not as trivial, because between ice_vsi_close() and ice_vsi_rebuild(), a lot of hardware interaction happens, this can make adding/deleting rings exit with an error. Luckily, VSI rebuild is pending and can apply new configuration for us in a managed fashion.
Therefore, add an additional VSI state flag ICE_VSI_REBUILD_PENDING to indicate that ice_x ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | May 15, 2025 | Sep 18, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade kernelUpgrade python3-perfUpgrade bpftoolUpgrade kernel-tools-libs | Feb 11, 2025 | Sep 18, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade kernelUpgrade kernel-toolsUpgrade bpftoolUpgrade kernel-tools-libs | Feb 11, 2025 | Sep 18, 2024 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Sep 18, 2024 |
| Suse | — | Upgrade kernel-source-azureUpgrade kernel-rt_debug-vdsoUpgrade kernel-devel-azureUpgrade kselftests-kmp-64kbUpgrade ocfs2-kmp-rtUpgrade dtb-appleUpgrade kernel-azure-extraUpgrade dtb-hisiliconUpgrade kernel-64kb-optionalUpgrade dtb-armUpgrade dtb-amlogicUpgrade dtb-xilinxUpgrade kernel-symsUpgrade kernel-zfcpdumpUpgrade gfs2-kmp-64kbUpgrade kernel-64kbUpgrade kernel-default-vdsoUpgrade kernel-kvmsmall-develUpgrade kernel-develUpgrade kernel-syms-azureUpgrade kernel-rt-develUpgrade kselftests-kmp-defaultUpgrade dlm-kmp-64kbUpgrade dtb-mediatekUpgrade dtb-exynosUpgrade kernel-kvmsmallUpgrade dlm-kmp-azureUpgrade dtb-amazonUpgrade kernel-debug-develUpgrade cluster-md-kmp-azureUpgrade kernel-default-develUpgrade gfs2-kmp-rtUpgrade dtb-lgUpgrade kernel-default-optionalUpgrade reiserfs-kmp-defaultUpgrade kernel-devel-rtUpgrade kernel-sourceUpgrade kernel-syms-rtUpgrade dtb-apmUpgrade kernel-default-extraUpgrade kernel-rt-livepatch-develUpgrade dtb-amdUpgrade dtb-freescaleUpgrade kernel-64kb-develUpgrade cluster-md-kmp-defaultUpgrade kernel-macrosUpgrade kernel-azure-vdsoUpgrade kernel-debugUpgrade kernel-obs-qaUpgrade kernel-defaultUpgrade kernel-default-livepatchUpgrade dlm-kmp-defaultUpgrade dtb-renesasUpgrade kernel-rt-optionalUpgrade kernel-obs-buildUpgrade dtb-marvellUpgrade reiserfs-kmp-azureUpgrade kernel-rt_debug-develUpgrade kernel-rt-vdsoUpgrade kernel-64kb-extraUpgrade gfs2-kmp-defaultUpgrade gfs2-kmp-azureUpgrade dtb-alteraUpgrade kernel-rtUpgrade ocfs2-kmp-64kbUpgrade kernel-rt-extraUpgrade kernel-azure-optionalUpgrade dtb-caviumUpgrade dtb-broadcomUpgrade dtb-allwinnerUpgrade kernel-docs-htmlUpgrade kernel-docsUpgrade kernel-azureUpgrade dtb-socionextUpgrade dtb-rockchipUpgrade dtb-nvidiaUpgrade kselftests-kmp-azureUpgrade ocfs2-kmp-azureUpgrade cluster-md-kmp-rtUpgrade kernel-default-base-rebuildUpgrade kernel-azure-develUpgrade kernel-source-rtUpgrade dtb-sprdUpgrade kernel-default-baseUpgrade dtb-qcomUpgrade kernel-default-livepatch-develUpgrade ocfs2-kmp-defaultUpgrade kernel-rt_debugUpgrade dlm-kmp-rtUpgrade reiserfs-kmp-rtUpgrade cluster-md-kmp-64kbUpgrade kernel-kvmsmall-vdsoUpgrade kernel-debug-vdsoUpgrade kselftests-kmp-rtUpgrade kernel-source-vanillaUpgrade reiserfs-kmp-64kb | Dec 5, 2025 | Dec 13, 2024 |
| Ubuntu | — | Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-6.8.0-1019-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-50-genericUpgrade linux-image-virtualUpgrade linux-image-oem-24.04aUpgrade linux-image-6.8.0-50-lowlatency-64kUpgrade linux-image-6.8.0-1016-raspiUpgrade linux-image-6.8.0-1019-nvidiaUpgrade linux-image-6.8.0-1019-gcpUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-6.8.0-50-lowlatencyUpgrade linux-image-oracleUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1017-oracleUpgrade linux-image-gcpUpgrade linux-image-6.8.0-1020-azure-fdeUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-oem-22.04dUpgrade linux-image-oem-22.04bUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-kvmUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-oracle-64kUpgrade linux-image-6.8.0-1019-nvidia-lowlatencyUpgrade linux-image-nvidia-64kUpgrade linux-image-azure-fdeUpgrade linux-image-awsUpgrade linux-image-gkeop-6.8Upgrade linux-image-nvidia-6.8Upgrade linux-image-oem-22.04Upgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-nvidiaUpgrade linux-image-6.8.0-1017-oracle-64kUpgrade linux-image-lowlatencyUpgrade linux-image-ibmUpgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1020-azureUpgrade linux-image-6.8.0-1017-ibmUpgrade linux-image-6.8.0-50-generic-64kUpgrade linux-image-oem-24.04Upgrade linux-image-azureUpgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-6.8.0-1015-gkeUpgrade linux-image-generic-lpaeUpgrade linux-image-gkeopUpgrade linux-image-6.8.0-1018-oemUpgrade linux-image-oem-22.04aUpgrade linux-image-raspiUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-ibm-classicUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-gkeUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-6.8.0-1020-awsUpgrade linux-image-6.8.0-1002-gkeopUpgrade linux-image-genericUpgrade linux-image-6.8.0-1019-nvidia-64kUpgrade linux-image-oem-22.04c | Dec 13, 2024 | Sep 18, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub