CVE-2025-38033: x86/Kconfig: make CFI_AUTO_DEFAULT depend on !RUST or Rust >= 1.88

Published Jun 18, 2025
·
Updated

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

x86/Kconfig: make CFIAUTODEFAULT depend on !RUST or Rust >= 1.88

Calling core::fmt::write() from rust code while FineIBT is enabled results in a kernel panic:

[ 4614.199779] kernel BUG at arch/x86/kernel/cet.c:132! [ 4614.205343] Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI [ 4614.211781] CPU: 2 UID: 0 PID: 6057 Comm: dmabufdump Tainted: G U O 6.12.17-android16-0-g6ab38c534a43 #1 9da040f27673ec3945e23b998a0f8bd64c846599 [ 4614.227832] Tainted: [U]=USER, [O]=OOTMODULE [ 4614.241247] RIP: 0010:dokernelcpfault+0xea/0xf0 ... [ 4614.398144] RIP: 0010:RNvXs5NtNtNtCs3o2tGsuHyou4core3fmt3num3impyNtB97Display3fmt+0x0/0x20 [ 4614.407792] Code: 48 f7 df 48 0f 48 f9 48 89 f2 89 c6 5d e9 18 fd ff ff 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 41 81 ea 14 61 af 2c 74 03 0f 0b 90 <66> 0f 1f 00 55 48 89 e5 48 89 f2 48 8b 3f be 01 00 00 00 5d e9 e7 [ 4614.428775] RSP: 0018:ffffb95acfa4ba68 EFLAGS: 00010246 [ 4614.434609] RAX: 0000000000000000 RBX: 0000000000000010 RCX: 0000000000000000 [ 4614.442587] RDX: 0000000000000007 RSI: ffffb95acfa4ba70 RDI: ffffb95acfa4bc88 [ 4614.450557] RBP: ffffb95acfa4bae0 R08: ffff0a00ffffff05 R09: 0000000000000070 [ 4614.458527] R10: 0000000000000000 R11: ffffffffab67eaf0 R12: ffffb95acfa4bcc8 [ 4614.466493] R13: ffffffffac5d50f0 R14: 0000000000000000 R15: 0000000000000000 [ 4614.474473] ? cfiRNvXs5NtNtNtCs3o2tGsuHyou4core3fmt3num3impyNtB97Display3fmt+0x10/0x10 [ 4614.484118] ? RNvNtCs3o2tGsuHyou4core3fmt5write+0x1d2/0x250

This happens because core::fmt::write() calls core::fmt::rt::Argument::fmt(), which currently has CFI disabled:

library/core/src/fmt/rt.rs: 171 // FIXME: Transmuting formatter in new and indirectly branching to/calling 172 // it here is an explicit CFI violation. 173 #[allow(inlinenosanitize)] 174 #[nosanitize(cfi, kcfi)] 175 #[inline] 176 pub(super) unsafe fn fmt(&self, f: &mut Formatter<'>) -> Result {

This causes a Control Protection exception, because FineIBT has sealed off the original function's endbr64.

This makes rust currently incompatible with FineIBT. Add a Kconfig dependency that prevents FineIBT from getting turned on by default if rust is enabled.

[ Rust 1.88.0 (scheduled for 2025-06-26) should have this fixed [1], and thus we relaxed the condition with Rust >= 1.88.

When objtool lands checking for this with e.g. [2], the plan is to ideally run that in upstream Rust's CI to prevent regressions early [3], since we do not control core's source code.

Alice tested the Rust PR backported to an older compiler.

Peter would like that Rust provides a stable core which can be pulled into the kernel: "Relying on that much out of tree code is 'unfortunate'".

- Miguel ]

[ Reduced splat. - Miguel ]

Affected Software

106 affected componentsFixes available
Linux Kernel
Linux Linux kernel>=6.11<6.12.31
Linux Linux kernel>=6.13<6.14.9
Linux Linux kernel=6.15-rc1
Linux Linux kernel=6.15-rc2
Linux Linux kernel=6.15-rc3
Linux Linux kernel=6.15-rc4
Linux Linux kernel=6.15-rc5
ubuntu/linux-hwe-edge*
ubuntu/linux-aws-5.0*
ubuntu/linux-aws-5.3*
ubuntu/linux-azure*
ubuntu/linux-azure-5.3*
ubuntu/linux-azure-edge*
ubuntu/linux-gcp*
ubuntu/linux-gcp-5.3*
ubuntu/linux-gke-4.15*
ubuntu/linux-gke-5.4*
ubuntu/linux-gkeop-5.4*
ubuntu/linux-hwe*
ubuntu/linux-hwe-edge*
ubuntu/linux-oem*
ubuntu/linux-oracle-5.0*
ubuntu/linux-oracle-5.3*
ubuntu/linux-aws-5.11*
ubuntu/linux-aws-5.13*
ubuntu/linux-aws-5.8*
ubuntu/linux-azure-5.11*
ubuntu/linux-azure-5.13*
ubuntu/linux-azure-5.8*
ubuntu/linux-azure-fde*
ubuntu/linux-gcp-5.11*
ubuntu/linux-gcp-5.13*
ubuntu/linux-gcp-5.8*
ubuntu/linux-gke*
ubuntu/linux-gke-5.15*
ubuntu/linux-gkeop*
ubuntu/linux-gkeop-5.15*
ubuntu/linux-hwe-5.11*
ubuntu/linux-hwe-5.13*
ubuntu/linux-hwe-5.8*
ubuntu/linux-intel-5.13*
ubuntu/linux-oem-5.10*
ubuntu/linux-oem-5.13*
ubuntu/linux-oem-5.6*
ubuntu/linux-oracle-5.11*
ubuntu/linux-oracle-5.13*
ubuntu/linux-oracle-5.8*
ubuntu/linux-raspi2*
ubuntu/linux-riscv*
ubuntu/linux-riscv-5.11*
ubuntu/linux-riscv-5.8*
ubuntu/linux-allwinner-5.19*
ubuntu/linux-aws-5.19*
ubuntu/linux-aws-6.2*
ubuntu/linux-aws-6.5*
ubuntu/linux-azure-5.19*
ubuntu/linux-azure-6.2*
ubuntu/linux-azure-6.5*
ubuntu/linux-azure-fde-5.19*
ubuntu/linux-azure-fde-6.2*
ubuntu/linux-gcp-5.19*
ubuntu/linux-gcp-6.2*
ubuntu/linux-gcp-6.5*
ubuntu/linux-hwe-5.19*
ubuntu/linux-hwe-6.2*
ubuntu/linux-hwe-6.5*
ubuntu/linux-intel-iot-realtime*
ubuntu/linux-lowlatency-hwe-5.19*
ubuntu/linux-lowlatency-hwe-6.2*
ubuntu/linux-lowlatency-hwe-6.5*
ubuntu/linux-nvidia-6.2*
ubuntu/linux-nvidia-6.5*
ubuntu/linux-oem-5.17*
ubuntu/linux-oem-6.0*
ubuntu/linux-oem-6.1*
ubuntu/linux-oem-6.5*
ubuntu/linux-oracle-6.5*
ubuntu/linux-realtime*
ubuntu/linux-riscv*
ubuntu/linux-riscv-5.19*
ubuntu/linux-riscv-6.5*
ubuntu/linux-starfive-5.19*
ubuntu/linux-starfive-6.2*
ubuntu/linux-starfive-6.5*
ubuntu/linux-aws-6.14<6.14.0-1013.13~24.04.1
6.14.0-1013.13~24.04.1
ubuntu/linux-azure-6.11*
ubuntu/linux-azure-fde-6.17*
ubuntu/linux-azure-nvidia-6.14<6.14.0-1007.7
6.14.0-1007.7
ubuntu/linux-gcp-6.11*
ubuntu/linux-gcp-6.14<6.14.0-1016.17~24.04.1
6.14.0-1016.17~24.04.1
ubuntu/linux-hwe-6.11*
ubuntu/linux-intel*
ubuntu/linux-lowlatency-hwe-6.11*
ubuntu/linux-nvidia-6.11*
ubuntu/linux-oem-6.11*
ubuntu/linux-oem-6.14<6.14.0-1012.12
6.14.0-1012.12
ubuntu/linux-oem-6.8*
ubuntu/linux-oracle-6.14<6.14.0-1013.13~24.04.1
6.14.0-1013.13~24.04.1
ubuntu/linux-raspi-realtime*
ubuntu/linux-realtime*
ubuntu/linux-riscv*
ubuntu/linux-riscv-6.14<6.14.0-32.32.1~24.04.1
6.14.0-32.32.1~24.04.1
ubuntu/linux-realtime-6.14<6.14.0-1012.12~24.04.1
6.14.0-1012.12~24.04.1
ubuntu/linux-azure-fde*
ubuntu/linux-vmware*

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade ubuntu/linux-aws-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-1013.13~24.04.1
  2. Upgrade

    Upgrade ubuntu/linux-azure-nvidia-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-1007.7
  3. Upgrade

    Upgrade ubuntu/linux-gcp-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-1016.17~24.04.1
  4. Upgrade

    Upgrade ubuntu/linux-oem-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-1012.12
  5. Upgrade

    Upgrade ubuntu/linux-oracle-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-1013.13~24.04.1
  6. Upgrade

    Upgrade ubuntu/linux-riscv-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-32.32.1~24.04.1
  7. Upgrade

    Upgrade ubuntu/linux-realtime-6.14 to a version that resolves this vulnerability.

    Fixed in 6.14.0-1012.12~24.04.1
  8. Upgrade

    Upgrade Rust to a version that resolves this vulnerability.

    Fixed in 1.88.0
  9. Configuration

    Add a Kconfig dependency so FineIBT is not enabled by default when Rust is enabled unless the Rust version is at least 1.88.

    x86/Kconfig CFI_AUTO_DEFAULT = depend on !RUST or Rust >= 1.88

Event History

Jun 18, 2025
CVE Published
via MITRE·09:33 AM
Data Sourced
via MITRE·09:33 AM
Description
Data Sourced
via OSV·10:15 AM
DescriptionSeverityAffected Software
Data Sourced
via NVD·10:15 AM
RemedyDescriptionSeverityAffected Software

Frequently Asked Questions

1

Which systems are exposed to this kernel panic?

The issue affects x86 kernel builds where FineIBT is enabled and Rust code calls core::fmt::write(). The affected configuration involves CFI_AUTO_DEFAULT together with Rust versions earlier than 1.88.

2

What level of access is needed to trigger the issue?

The supplied CVSS vector lists local attack vector, low attack complexity, low privileges required, and no user interaction. Successful triggering can cause a kernel panic, resulting in denial of service.

3

What can be done if the patch cannot be applied immediately?

Avoid enabling the affected CFI_AUTO_DEFAULT configuration when building with Rust earlier than version 1.88. The fix makes CFI_AUTO_DEFAULT depend on either Rust being disabled or Rust version 1.88 or later.

4

How can administrators identify a possible occurrence?

A triggered system may log a kernel BUG at arch/x86/kernel/cet.c:132 followed by an invalid-opcode oops. The trace can include Rust core formatting symbols, such as core::fmt::num::imp::Display::fmt, after a call to core::fmt::write().

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203