CVE-2026-98641

Estado: RecibidaSin puntuar—
Gravedad—Sin puntuar
Probabilidad de explotación0.17 %mayor que el 6 % de las CVE
Explotación activaNono figura en el catálogo de CISA
Exploit públicoNo conocidosin código público localizado

En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:

bpf, arm64: configurar el puntero de marco para la callback de excepciones

Un programa que actúa como límite de excepción guarda todos los registros callee-saved, por lo que build_prologue() toma la ruta exception_cb y nunca llama a push_callee_regs(). Ese es el único punto donde se ejecuta find_used_callee_regs() y, con él, el único lugar donde se establece ctx->fp_used, de modo que el prólogo de la callback no emite el

que hace que BPF_REG_FP apunte al marco en el que se ejecuta la callback. x25 conserva el valor que tenía cuando se llamó a bpf_throw().

Leer descripción completaMostrar menos

Si la excepción se lanzó desde una subrutina que usa su propia pila de BPF, ese valor es el puntero de marco de la subrutina y, como la subrutina nunca retorna, tampoco llega a restaurar x25.

Los accesos a la pila a través de BPF_REG_FP se reescriben para ser relativos al puntero de pila, así que siguen cayendo en el marco propio de la callback. Materializar el registro, en cambio, no: una callback que pasa a un helper la dirección de una variable local le entrega una dirección en el marco de la subrutina ya muerta. Esa dirección queda entonces por debajo del puntero de pila de la callback, y la cadena de llamadas del propio helper la cubre, de modo que el helper puede sobrescribir su propia dirección de retorno. El 0x1234 de abajo es el valor que se pidió al helper que almacenara:

Establecer ctx->fp_used en la ruta de la callback de excepciones para que el código existente, más abajo, asigne x25 a partir del puntero de pila. El epílogo lo restaura desde el área de guardado del programa principal junto con el resto de registros callee-saved, como ya hace. x86 establece el puntero de marco de la callback a partir del argumento que recibe, y powerpc lo calcula a partir del puntero de pila.

Detalles técnicos trazas, registros y código del informe original
  mov x25, sp

  pc : 0x1234
  lr : 0x1234
  Call trace:
   0x1234 (P)
   bpf_test_run+0x188/0x3e0
   bpf_prog_test_run_skb+0x47c/0x998
   __sys_bpf+0xbdc/0xdd8
  Kernel panic - not syncing: Oops: Fatal exception in interrupt

Traducción automática del texto original de NVD (en inglés).

CVSS

NVD no ha asignado puntuación CVSS a esta CVE (habitual desde el cambio de política de abril de 2026).

Probabilidad de explotación (EPSS)

Probabilidad de explotación en los próximos 30 días
0.17 %
Percentil entre todas las CVEs puntuadas
6
Fecha de la puntuación
20/10/2026

EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).

Tecnologías afectadas (1)

⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.

Referencias

Mostrar las 4 referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-98641",
  "cveTags": [],
  "metrics": {},
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "product": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5d4fa9ec5643a5c75d3c1e6abf50fb9284caf1ff",
              "lessThan": "ecdd770a9fc3eaf6c3127c5991312b84774a7b0f",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "5d4fa9ec5643a5c75d3c1e6abf50fb9284caf1ff",
              "lessThan": "b67b4c763f211e7a6391c356fef552e2ea63f08a",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "5d4fa9ec5643a5c75d3c1e6abf50fb9284caf1ff",
              "lessThan": "d7cd5ebe13989f265015910faa25e5d50faa4c22",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "5d4fa9ec5643a5c75d3c1e6abf50fb9284caf1ff",
              "lessThan": "ef1fb82f12186dd26153b14d9fbcf4ec98db81b3",
              "versionType": "git"
            }
          ],
          "programFiles": [
            "arch/arm64/net/bpf_jit_comp.c"
          ],
          "defaultStatus": "unaffected"
        },
        {
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "product": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.12"
            },
            {
              "status": "unaffected",
              "version": "0",
              "lessThan": "6.12",
              "versionType": "semver"
            },
            {
              "status": "unaffected",
              "version": "6.12.112",
              "versionType": "semver",
              "lessThanOrEqual": "6.12.*"
            },
            {
              "status": "unaffected",
              "version": "6.18.55",
              "versionType": "semver",
              "lessThanOrEqual": "6.18.*"
            },
            {
              "status": "unaffected",
              "version": "7.2.9",
              "versionType": "semver",
              "lessThanOrEqual": "7.2.*"
            },
            {
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix",
              "lessThanOrEqual": "*"
            }
          ],
          "programFiles": [
            "arch/arm64/net/bpf_jit_comp.c"
          ],
          "defaultStatus": "affected"
        }
      ]
    }
  ],
  "published": "2026-10-18T16:17:17.247",
  "references": [
    {
      "url": "https://git.kernel.org/stable/c/b67b4c763f211e7a6391c356fef552e2ea63f08a",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/d7cd5ebe13989f265015910faa25e5d50faa4c22",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/ecdd770a9fc3eaf6c3127c5991312b84774a7b0f",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/ef1fb82f12186dd26153b14d9fbcf4ec98db81b3",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ],
  "vulnStatus": "Received",
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf, arm64: set up the frame pointer for the exception callback\n\nA program acting as exception boundary saves all callee-saved registers,\nso build_prologue() takes the exception_cb path and never calls\npush_callee_regs(). That is the only place find_used_callee_regs() runs,\nand with it the only place ctx->fp_used is set, so the callback prologue\ndoes not emit the\n\n  mov x25, sp\n\nthat points BPF_REG_FP at the frame the callback runs on. x25 keeps\nwhatever it held when bpf_throw() was called. If the throw came from a\nsubprogram that uses its own BPF stack, that is the subprogram's frame\npointer, and since the subprogram never returns it never restores x25\neither.\n\nStack accesses through BPF_REG_FP are rewritten to be stack pointer\nrelative, so those still land in the callback's own frame. Materializing\nthe register does not: a callback that passes the address of a local\nvariable to a helper hands over an address in the dead subprogram's\nframe. That address is below the callback's stack pointer by then, and\nthe helper's own call chain covers it, so the helper can write over its\nown return address. 0x1234 below is the value the helper was asked to\nstore:\n\n  pc : 0x1234\n  lr : 0x1234\n  Call trace:\n   0x1234 (P)\n   bpf_test_run+0x188/0x3e0\n   bpf_prog_test_run_skb+0x47c/0x998\n   __sys_bpf+0xbdc/0xdd8\n  Kernel panic - not syncing: Oops: Fatal exception in interrupt\n\nSet ctx->fp_used on the exception callback path so that the existing code\nfurther down sets x25 from the stack pointer. The epilogue restores it\nfrom the main program's save area along with the other callee-saved\nregisters, as it already does. x86 sets the frame pointer for the\ncallback from the argument it is passed, and powerpc computes it from\nthe stack pointer."
    }
  ],
  "lastModified": "2026-10-19T10:19:28.340",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}