CVE-2025-38670 (GCVE-0-2025-38670)

Vulnerability from cvelistv5 – Published: 2025-08-22 16:03 – Updated: 2026-08-05 12:03
VLAI
Title
arm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack()
Summary
In the Linux kernel, the following vulnerability has been resolved: arm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack() `cpu_switch_to()` and `call_on_irq_stack()` manipulate SP to change to different stacks along with the Shadow Call Stack if it is enabled. Those two stack changes cannot be done atomically and both functions can be interrupted by SErrors or Debug Exceptions which, though unlikely, is very much broken : if interrupted, we can end up with mismatched stacks and Shadow Call Stack leading to clobbered stacks. In `cpu_switch_to()`, it can happen when SP_EL0 points to the new task, but x18 stills points to the old task's SCS. When the interrupt handler tries to save the task's SCS pointer, it will save the old task SCS pointer (x18) into the new task struct (pointed to by SP_EL0), clobbering it. In `call_on_irq_stack()`, it can happen when switching from the task stack to the IRQ stack and when switching back. In both cases, we can be interrupted when the SCS pointer points to the IRQ SCS, but SP points to the task stack. The nested interrupt handler pushes its return addresses on the IRQ SCS. It then detects that SP points to the task stack, calls `call_on_irq_stack()` and clobbers the task SCS pointer with the IRQ SCS pointer, which it will also use ! This leads to tasks returning to addresses on the wrong SCS, or even on the IRQ SCS, triggering kernel panics via CONFIG_VMAP_STACK or FPAC if enabled. This is possible on a default config, but unlikely. However, when enabling CONFIG_ARM64_PSEUDO_NMI, DAIF is unmasked and instead the GIC is responsible for filtering what interrupts the CPU should receive based on priority. Given the goal of emulating NMIs, pseudo-NMIs can be received by the CPU even in `cpu_switch_to()` and `call_on_irq_stack()`, possibly *very* frequently depending on the system configuration and workload, leading to unpredictable kernel panics. Completely mask DAIF in `cpu_switch_to()` and restore it when returning. Do the same in `call_on_irq_stack()`, but restore and mask around the branch. Mask DAIF even if CONFIG_SHADOW_CALL_STACK is not enabled for consistency of behaviour between all configurations. Introduce and use an assembly macro for saving and masking DAIF, as the existing one saves but only masks IF.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 3f225f29c69c13ce1cbdb1d607a42efeef080056 , < f7e0231eeaa33245c649fac0303cf97209605446 (git)
Affected: 402d2b1d54b7085d0c3bfd01fd50c2701dde64b3 , < 407047893a64399f2d2390ff35cc6061107d805d (git)
Affected: 4403c7b7e5e1ad09a266b6e399fd7bf97931508e , < a6b0cb523eaa01efe8a3f76ced493ba60674c6e6 (git)
Affected: 59b37fe52f49955791a460752c37145f1afdcad1 , < 9433a5f437b0948d6a2d8a02ad7a42ab7ca27a61 (git)
Affected: 59b37fe52f49955791a460752c37145f1afdcad1 , < 708fd522b86d2a9544c34ec6a86fa3fc23336525 (git)
Affected: 59b37fe52f49955791a460752c37145f1afdcad1 , < 0f67015d72627bad72da3c2084352e0aa134416b (git)
Affected: 59b37fe52f49955791a460752c37145f1afdcad1 , < d42e6c20de6192f8e4ab4cf10be8c694ef27e8cb (git)
Affected: e47ce4f11e26fa3ea99b09521da8b3ac3a7b578d (git)
Affected: 5.10.180 , < 5.10.210 (semver)
Affected: 5.15.111 , < 5.15.190 (semver)
Affected: 6.1.28 , < 6.1.149 (semver)
Affected: 6.2.15 , < 6.3 (semver)
Create a notification for this product.
Linux Linux Affected: 6.3
Unaffected: 0 , < 6.3 (semver)
Unaffected: 5.10.210 , ≤ 5.10.* (semver)
Unaffected: 5.15.190 , ≤ 5.15.* (semver)
Unaffected: 6.1.149 , ≤ 6.1.* (semver)
Unaffected: 6.6.101 , ≤ 6.6.* (semver)
Unaffected: 6.12.41 , ≤ 6.12.* (semver)
Unaffected: 6.15.9 , ≤ 6.15.* (semver)
Unaffected: 6.16 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Siemens SIMATIC CN 4100 Affected: 0 , < V5.0 (custom)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T17:40:56.025Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"
          }
        ],
        "title": "CVE Program Container"
      },
      {
        "affected": [
          {
            "defaultStatus": "unknown",
            "product": "SIMATIC CN 4100",
            "vendor": "Siemens",
            "versions": [
              {
                "lessThan": "V5.0",
                "status": "affected",
                "version": "0",
                "versionType": "custom"
              }
            ]
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-05-12T12:05:16.720Z",
          "orgId": "0b142b55-0307-4c5a-b3c9-f314f3fb7c5e",
          "shortName": "siemens-SADP"
        },
        "references": [
          {
            "url": "https://cert-portal.siemens.com/productcert/html/ssa-032379.html"
          }
        ],
        "x_adpType": "supplier"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "arch/arm64/include/asm/assembler.h",
            "arch/arm64/kernel/entry.S"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "f7e0231eeaa33245c649fac0303cf97209605446",
              "status": "affected",
              "version": "3f225f29c69c13ce1cbdb1d607a42efeef080056",
              "versionType": "git"
            },
            {
              "lessThan": "407047893a64399f2d2390ff35cc6061107d805d",
              "status": "affected",
              "version": "402d2b1d54b7085d0c3bfd01fd50c2701dde64b3",
              "versionType": "git"
            },
            {
              "lessThan": "a6b0cb523eaa01efe8a3f76ced493ba60674c6e6",
              "status": "affected",
              "version": "4403c7b7e5e1ad09a266b6e399fd7bf97931508e",
              "versionType": "git"
            },
            {
              "lessThan": "9433a5f437b0948d6a2d8a02ad7a42ab7ca27a61",
              "status": "affected",
              "version": "59b37fe52f49955791a460752c37145f1afdcad1",
              "versionType": "git"
            },
            {
              "lessThan": "708fd522b86d2a9544c34ec6a86fa3fc23336525",
              "status": "affected",
              "version": "59b37fe52f49955791a460752c37145f1afdcad1",
              "versionType": "git"
            },
            {
              "lessThan": "0f67015d72627bad72da3c2084352e0aa134416b",
              "status": "affected",
              "version": "59b37fe52f49955791a460752c37145f1afdcad1",
              "versionType": "git"
            },
            {
              "lessThan": "d42e6c20de6192f8e4ab4cf10be8c694ef27e8cb",
              "status": "affected",
              "version": "59b37fe52f49955791a460752c37145f1afdcad1",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "e47ce4f11e26fa3ea99b09521da8b3ac3a7b578d",
              "versionType": "git"
            },
            {
              "lessThan": "5.10.210",
              "status": "affected",
              "version": "5.10.180",
              "versionType": "semver"
            },
            {
              "lessThan": "5.15.190",
              "status": "affected",
              "version": "5.15.111",
              "versionType": "semver"
            },
            {
              "lessThan": "6.1.149",
              "status": "affected",
              "version": "6.1.28",
              "versionType": "semver"
            },
            {
              "lessThan": "6.3",
              "status": "affected",
              "version": "6.2.15",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/arm64/include/asm/assembler.h",
            "arch/arm64/kernel/entry.S"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.3"
            },
            {
              "lessThan": "6.3",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.210",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.190",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.149",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.101",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.41",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.15.*",
              "status": "unaffected",
              "version": "6.15.9",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.16",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.210",
                  "versionStartIncluding": "5.10.180",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.190",
                  "versionStartIncluding": "5.15.111",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.149",
                  "versionStartIncluding": "6.1.28",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.101",
                  "versionStartIncluding": "6.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.41",
                  "versionStartIncluding": "6.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15.9",
                  "versionStartIncluding": "6.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16",
                  "versionStartIncluding": "6.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.2.15",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\narm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack()\n\n`cpu_switch_to()` and `call_on_irq_stack()` manipulate SP to change\nto different stacks along with the Shadow Call Stack if it is enabled.\nThose two stack changes cannot be done atomically and both functions\ncan be interrupted by SErrors or Debug Exceptions which, though unlikely,\nis very much broken : if interrupted, we can end up with mismatched stacks\nand Shadow Call Stack leading to clobbered stacks.\n\nIn `cpu_switch_to()`, it can happen when SP_EL0 points to the new task,\nbut x18 stills points to the old task\u0027s SCS. When the interrupt handler\ntries to save the task\u0027s SCS pointer, it will save the old task\nSCS pointer (x18) into the new task struct (pointed to by SP_EL0),\nclobbering it.\n\nIn `call_on_irq_stack()`, it can happen when switching from the task stack\nto the IRQ stack and when switching back. In both cases, we can be\ninterrupted when the SCS pointer points to the IRQ SCS, but SP points to\nthe task stack. The nested interrupt handler pushes its return addresses\non the IRQ SCS. It then detects that SP points to the task stack,\ncalls `call_on_irq_stack()` and clobbers the task SCS pointer with\nthe IRQ SCS pointer, which it will also use !\n\nThis leads to tasks returning to addresses on the wrong SCS,\nor even on the IRQ SCS, triggering kernel panics via CONFIG_VMAP_STACK\nor FPAC if enabled.\n\nThis is possible on a default config, but unlikely.\nHowever, when enabling CONFIG_ARM64_PSEUDO_NMI, DAIF is unmasked and\ninstead the GIC is responsible for filtering what interrupts the CPU\nshould receive based on priority.\nGiven the goal of emulating NMIs, pseudo-NMIs can be received by the CPU\neven in `cpu_switch_to()` and `call_on_irq_stack()`, possibly *very*\nfrequently depending on the system configuration and workload, leading\nto unpredictable kernel panics.\n\nCompletely mask DAIF in `cpu_switch_to()` and restore it when returning.\nDo the same in `call_on_irq_stack()`, but restore and mask around\nthe branch.\nMask DAIF even if CONFIG_SHADOW_CALL_STACK is not enabled for consistency\nof behaviour between all configurations.\n\nIntroduce and use an assembly macro for saving and masking DAIF,\nas the existing one saves but only masks IF."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable window is in arm64 low-level entry code (`cpu_switch_to()`, `call_on_irq_stack()`) reached only by executing on the CPU \u2014 forcing context switches and taking interrupts/NMIs \u2014 which requires local code execution. No remote protocol data reaches this path; network traffic only produces normal-priority IRQs that are masked in the window.\nAC:L - An unprivileged task controls both sides: it can drive millions of context switches per second (pinned yield/futex ping-pong loops) to hit the ~20-instruction window continuously, while generating the interrupting side itself via high-frequency `perf_event_open()` sampling, whose PMU overflow IRQ is registered as a pseudo-NMI and is therefore delivered even with interrupts \"disabled\". The affected configurations (`CONFIG_SHADOW_CALL_STACK`, `CONFIG_ARM64_PSEUDO_NMI`) are default in Android GKI/ChromeOS and cloud arm64 kernels, not rare, and the commit itself notes the fault can occur \"*very* frequently\" under such configs.\nPR:L - Any unprivileged local user can trigger the code path \u2014 scheduling and interrupt handling need no capability at all \u2014 and unprivileged per-task perf sampling is permitted at the default `perf_event_paranoid=2`. No CAP_SYS_ADMIN, CAP_PERFMON, or root is required to reach or hammer the race.\nUI:N - The attacker\u0027s own threads generate both the context-switch storm and the NMI/exception source; no victim must open a file, mount anything, or run any application. Corruption of an unrelated task\u0027s shadow call stack happens as a side effect of normal scheduler operation.\nS:U - The clobbered shadow call stack pointer, corrupted `task_struct.scs_sp`, and resulting bad returns all occur within the kernel\u0027s own security authority on the same host. No VM, hypervisor, or IOMMU boundary is crossed.\nC:H - The race corrupts control-flow metadata across tasks \u2014 one task\u0027s `ret` sequence consumes another task\u0027s or the IRQ shadow stack \u2014 so execution resumes at a stale kernel return address while SP still refers to a mismatched frame, causing the kernel to interpret unrelated stack contents that can be copied back to userspace via the hijacked path. Defeating the SCS hardening and gaining control over which kernel code runs with foreign stack state is leverageable for kernel memory disclosure.\nI:H - This is genuine memory corruption: a pointer into a foreign shadow stack is written into another task\u0027s `task_struct`, return addresses are pushed into a shadow stack that belongs to a different context, and the victim task then returns to an address it never called. The commit states the wrong-SCS return only panics \"via CONFIG_VMAP_STACK or FPAC if enabled\", so on kernels without those hardenings the corrupted control flow proceeds \u2014 a control-flow hijack primitive whose targeted return addresses the attacker influences by choosing which syscalls populate the shadow stacks.\nA:H - The documented, observed outcome is \"unpredictable kernel panics\" \u2014 VMAP_STACK guard-page faults or FPAC aborts from returning onto the wrong shadow call stack \u2014 which is a full system crash. The condition was serious enough to warrant a stable backport across five stable trees after being reported as spontaneous panics on production arm64 systems."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:03:51.464Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/f7e0231eeaa33245c649fac0303cf97209605446"
        },
        {
          "url": "https://git.kernel.org/stable/c/407047893a64399f2d2390ff35cc6061107d805d"
        },
        {
          "url": "https://git.kernel.org/stable/c/a6b0cb523eaa01efe8a3f76ced493ba60674c6e6"
        },
        {
          "url": "https://git.kernel.org/stable/c/9433a5f437b0948d6a2d8a02ad7a42ab7ca27a61"
        },
        {
          "url": "https://git.kernel.org/stable/c/708fd522b86d2a9544c34ec6a86fa3fc23336525"
        },
        {
          "url": "https://git.kernel.org/stable/c/0f67015d72627bad72da3c2084352e0aa134416b"
        },
        {
          "url": "https://git.kernel.org/stable/c/d42e6c20de6192f8e4ab4cf10be8c694ef27e8cb"
        }
      ],
      "title": "arm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-38670",
    "datePublished": "2025-08-22T16:03:01.242Z",
    "dateReserved": "2025-04-16T04:51:24.031Z",
    "dateUpdated": "2026-08-05T12:03:51.464Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-38670",
      "date": "2026-08-05",
      "epss": "0.00156",
      "percentile": "0.05228"
    },
    "microsoft_vex": {
      "current_release_date": "2025-09-03T23:20:26.000Z",
      "cve": "CVE-2025-38670",
      "id": "msrc_CVE-2025-38670",
      "initial_release_date": "2025-08-02T00:00:00.000Z",
      "product_status:fixed": "1",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "arm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack()",
      "url": "https://msrc.microsoft.com/csaf/vex/2025/msrc_cve-2025-38670.json",
      "version": "1"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-38670\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-08-22T16:15:42.547\",\"lastModified\":\"2026-07-30T06:23:34.143\",\"vulnStatus\":\"Modified\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\narm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack()\\n\\n`cpu_switch_to()` and `call_on_irq_stack()` manipulate SP to change\\nto different stacks along with the Shadow Call Stack if it is enabled.\\nThose two stack changes cannot be done atomically and both functions\\ncan be interrupted by SErrors or Debug Exceptions which, though unlikely,\\nis very much broken : if interrupted, we can end up with mismatched stacks\\nand Shadow Call Stack leading to clobbered stacks.\\n\\nIn `cpu_switch_to()`, it can happen when SP_EL0 points to the new task,\\nbut x18 stills points to the old task\u0027s SCS. When the interrupt handler\\ntries to save the task\u0027s SCS pointer, it will save the old task\\nSCS pointer (x18) into the new task struct (pointed to by SP_EL0),\\nclobbering it.\\n\\nIn `call_on_irq_stack()`, it can happen when switching from the task stack\\nto the IRQ stack and when switching back. In both cases, we can be\\ninterrupted when the SCS pointer points to the IRQ SCS, but SP points to\\nthe task stack. The nested interrupt handler pushes its return addresses\\non the IRQ SCS. It then detects that SP points to the task stack,\\ncalls `call_on_irq_stack()` and clobbers the task SCS pointer with\\nthe IRQ SCS pointer, which it will also use !\\n\\nThis leads to tasks returning to addresses on the wrong SCS,\\nor even on the IRQ SCS, triggering kernel panics via CONFIG_VMAP_STACK\\nor FPAC if enabled.\\n\\nThis is possible on a default config, but unlikely.\\nHowever, when enabling CONFIG_ARM64_PSEUDO_NMI, DAIF is unmasked and\\ninstead the GIC is responsible for filtering what interrupts the CPU\\nshould receive based on priority.\\nGiven the goal of emulating NMIs, pseudo-NMIs can be received by the CPU\\neven in `cpu_switch_to()` and `call_on_irq_stack()`, possibly *very*\\nfrequently depending on the system configuration and workload, leading\\nto unpredictable kernel panics.\\n\\nCompletely mask DAIF in `cpu_switch_to()` and restore it when returning.\\nDo the same in `call_on_irq_stack()`, but restore and mask around\\nthe branch.\\nMask DAIF even if CONFIG_SHADOW_CALL_STACK is not enabled for consistency\\nof behaviour between all configurations.\\n\\nIntroduce and use an assembly macro for saving and masking DAIF,\\nas the existing one saves but only masks IF.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: arm64/entry: Mask DAIF en cpu_switch_to(), call_on_irq_stack() `cpu_switch_to()` y `call_on_irq_stack()` manipulan SP para cambiar a diferentes pilas junto con Shadow Call Stack si est\u00e1 habilitado. Estos dos cambios de pila no se pueden realizar de forma autom\u00e1tica y ambas funciones pueden ser interrumpidas por SErrors o Debug Exceptions, lo que, aunque poco probable, es muy problem\u00e1tico: si se interrumpe, podemos terminar con pilas desajustadas y Shadow Call Stack, lo que lleva a pilas da\u00f1adas. En `cpu_switch_to()`, puede ocurrir cuando SP_EL0 apunta a la nueva tarea, pero x18 todav\u00eda apunta al SCS de la tarea anterior. Cuando el manejador de interrupciones intenta guardar el puntero SCS de la tarea, guardar\u00e1 el antiguo puntero SCS de la tarea (x18) en la nueva estructura de la tarea (apuntada por SP_EL0), bloque\u00e1ndola. En `call_on_irq_stack()`, puede suceder al cambiar de la pila de tareas a la pila de IRQ y al volver a cambiar. En ambos casos, podemos ser interrumpidos cuando el puntero SCS apunta al SCS de IRQ, pero SP apunta a la pila de tareas. El manejador de interrupciones anidado empuja sus direcciones de retorno en el SCS de IRQ. Luego detecta que SP apunta a la pila de tareas, llama a `call_on_irq_stack()` y bloquea el puntero SCS de la tarea con el puntero SCS de IRQ, \u00a1que tambi\u00e9n usar\u00e1! Esto lleva a que las tareas regresen a direcciones en el SCS incorrecto, o incluso en el SCS de IRQ, lo que desencadena p\u00e1nicos del kernel a trav\u00e9s de CONFIG_VMAP_STACK o FPAC si est\u00e1 habilitado. Esto es posible en una configuraci\u00f3n predeterminada, pero poco probable. Sin embargo, al habilitar CONFIG_ARM64_PSEUDO_NMI, DAIF se desenmascara y, en su lugar, el GIC se encarga de filtrar las interrupciones que la CPU deber\u00eda recibir seg\u00fan su prioridad. Dado el objetivo de emular NMI, la CPU puede recibir pseudo-NMI incluso en `cpu_switch_to()` y `call_on_irq_stack()`, posiblemente con mucha frecuencia seg\u00fan la configuraci\u00f3n del sistema y la carga de trabajo, lo que provoca p\u00e1nicos de kernel impredecibles. Enmascare completamente DAIF en `cpu_switch_to()` y rest\u00e1urelo al regresar. Haga lo mismo en `call_on_irq_stack()`, pero rest\u00e1urelo y enmascare alrededor de la rama. Enmascare DAIF incluso si CONFIG_SHADOW_CALL_STACK no est\u00e1 habilitado para mantener la coherencia entre todas las configuraciones. Introduzca y utilice una macro de ensamblaje para guardar y enmascarar DAIF, ya que la existente guarda pero solo enmascara las interrupciones IF.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"arch/arm64/include/asm/assembler.h\",\"arch/arm64/kernel/entry.S\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"3f225f29c69c13ce1cbdb1d607a42efeef080056\",\"lessThan\":\"f7e0231eeaa33245c649fac0303cf97209605446\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"402d2b1d54b7085d0c3bfd01fd50c2701dde64b3\",\"lessThan\":\"407047893a64399f2d2390ff35cc6061107d805d\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"4403c7b7e5e1ad09a266b6e399fd7bf97931508e\",\"lessThan\":\"a6b0cb523eaa01efe8a3f76ced493ba60674c6e6\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"59b37fe52f49955791a460752c37145f1afdcad1\",\"lessThan\":\"9433a5f437b0948d6a2d8a02ad7a42ab7ca27a61\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"59b37fe52f49955791a460752c37145f1afdcad1\",\"lessThan\":\"708fd522b86d2a9544c34ec6a86fa3fc23336525\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"59b37fe52f49955791a460752c37145f1afdcad1\",\"lessThan\":\"0f67015d72627bad72da3c2084352e0aa134416b\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"59b37fe52f49955791a460752c37145f1afdcad1\",\"lessThan\":\"d42e6c20de6192f8e4ab4cf10be8c694ef27e8cb\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"e47ce4f11e26fa3ea99b09521da8b3ac3a7b578d\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"5.10.180\",\"lessThan\":\"5.10.210\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"5.15.111\",\"lessThan\":\"5.15.190\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"6.1.28\",\"lessThan\":\"6.1.149\",\"versionType\":\"semver\",\"status\":\"affected\"},{\"version\":\"6.2.15\",\"lessThan\":\"6.3\",\"versionType\":\"semver\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"arch/arm64/include/asm/assembler.h\",\"arch/arm64/kernel/entry.S\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.3\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.3\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"5.10.210\",\"lessThanOrEqual\":\"5.10.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"5.15.190\",\"lessThanOrEqual\":\"5.15.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.1.149\",\"lessThanOrEqual\":\"6.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.6.101\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.41\",\"lessThanOrEqual\":\"6.12.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.15.9\",\"lessThanOrEqual\":\"6.15.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.16\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]},{\"source\":\"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e\",\"affectedData\":[{\"vendor\":\"Siemens\",\"product\":\"SIMATIC CN 4100\",\"defaultStatus\":\"unknown\",\"versions\":[{\"version\":\"0\",\"lessThan\":\"V5.0\",\"versionType\":\"custom\",\"status\":\"affected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":7.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9},{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H\",\"baseScore\":7.1,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.2}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-668\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.10.180\",\"versionEndExcluding\":\"5.10.210\",\"matchCriteriaId\":\"D5B50B94-9E10-42CD-A4D1-FB01E3EA80D0\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.15.111\",\"versionEndExcluding\":\"5.15.190\",\"matchCriteriaId\":\"DF2B45D5-3D03-426B-9FAC-C202FED7C73F\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.1.28\",\"versionEndExcluding\":\"6.1.149\",\"matchCriteriaId\":\"50F3F7E9-73C5-484E-9E8D-44845370BD80\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.2.15\",\"versionEndExcluding\":\"6.6.101\",\"matchCriteriaId\":\"DB46908D-0838-4BE7-B629-7FA100077B29\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.7\",\"versionEndExcluding\":\"6.12.41\",\"matchCriteriaId\":\"7B9B92B6-A7E5-4697-AB94-8432ED55AA05\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.13\",\"versionEndExcluding\":\"6.15.9\",\"matchCriteriaId\":\"656D6B8C-4D7B-4385-98B6-44EA4AFADD2E\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"6D4894DB-CCFE-4602-B1BF-3960B2E19A01\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"09709862-E348-4378-8632-5A7813EDDC86\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc3:*:*:*:*:*:*\",\"matchCriteriaId\":\"415BF58A-8197-43F5-B3D7-D1D63057A26E\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc4:*:*:*:*:*:*\",\"matchCriteriaId\":\"A0517869-312D-4429-80C2-561086E1421C\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc5:*:*:*:*:*:*\",\"matchCriteriaId\":\"85421F4E-C863-4ABF-B4B4-E887CC2F7F92\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc6:*:*:*:*:*:*\",\"matchCriteriaId\":\"3827F0D4-5FEE-4181-B267-5A45E7CA11FC\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc7:*:*:*:*:*:*\",\"matchCriteriaId\":\"7A9C2DE5-43B8-4D73-BDB5-EA55C7671A52\"}]}]},{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:*\",\"matchCriteriaId\":\"FA6FEEC2-9F11-4643-8827-749718254FED\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/0f67015d72627bad72da3c2084352e0aa134416b\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/407047893a64399f2d2390ff35cc6061107d805d\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/708fd522b86d2a9544c34ec6a86fa3fc23336525\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9433a5f437b0948d6a2d8a02ad7a42ab7ca27a61\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/a6b0cb523eaa01efe8a3f76ced493ba60674c6e6\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/d42e6c20de6192f8e4ab4cf10be8c694ef27e8cb\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/f7e0231eeaa33245c649fac0303cf97209605446\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\",\"tags\":[\"Third Party Advisory\"]},{\"url\":\"https://cert-portal.siemens.com/productcert/html/ssa-032379.html\",\"source\":\"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "None",
      "current_release_date": "2026-06-30T10:23:00+00:00",
      "cve": "CVE-2025-38670",
      "id": "CVE-2025-38670",
      "initial_release_date": "2025-08-22T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: arm64/entry: Mask DAIF in cpu_switch_to(), call_on_irq_stack()",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-38670.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-07-16T18:38:44Z",
      "cve": "CVE-2025-38670",
      "id": "CVE-2025-38670",
      "initial_release_date": "2025-08-22T23:28:07Z",
      "product_status:first_fixed": "2",
      "product_status:known_affected": "521",
      "product_status:known_not_affected": "208",
      "product_status:recommended": "508",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2025-38670",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2025-38670.json",
      "version": "47"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…