CVE-2026-98803

Estado: RecibidaSin puntuar—
Gravedad—Sin puntuar
Probabilidad de explotación0.17 %mayor que el 5 % 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:

net: stmmac: fix rx Scatter-Gather support

Cuando un marco recibido es mayor que dma_buf_sz, el DMA distribuye el marco entre varios descriptores RX (rx Scatter-Gather). El búfer RX secundario (sec_page) solo se asignaba y programaba cuando la división de cabecera (SPH) estaba activa, por lo que, en los marcos normales, buffer2 no se asignaba ni estaba respaldado por una correspondencia válida. En cuanto un marco entrante desbordaba buffer1, el DMA escribía el desbordamiento en la dirección del búfer secundario sin correspondencia, lo que provocaba un fallo de traducción de SMMU en plataformas basadas en IOMMU:

Leer descripción completaMostrar menos

arm-smmu 15000000.iommu: Unhandled context fault: fsr=0x402, iova=0x00000000, fsynr=0x7f0011, cbfrsynra=0x1c90, cb=11 arm-smmu 15000000.iommu: FSR = 00000402 [Format=2 TF], SID=0x1c90 arm-smmu 15000000.iommu: FSYNR0 = 007f0011 [S1CBNDX=127 WNR PLVL=1]

Se habilita scatter-gather para marcos sin SPH en los núcleos que pueden programar un búfer RX secundario independiente (GMAC4/XGMAC): se asigna y se marca buffer2 como válido en stmmac_init_rx_buffers() y stmmac_rx_refill(), y se tiene en cuenta en el cálculo de la longitud del búfer. Los núcleos heredados no tienen la operación set_sec_addr, así que mantienen buffer2 deshabilitado.

Dado que buffer2 se entrega al DMA en el desplazamiento 0 de la página, la ventana de sincronización del page pool se amplía para cubrir ambos búferes en todos los modos: offset se establece en 0 y max_len en dma_buf_sz + stmmac_rx_offset().

El FCS puede cruzar el límite entre buffer1 y buffer2 y un límite de descriptor, por lo que ahora se elimina de la cola del marco ensamblado con pskb_trim() en lugar de hacerlo desde un único búfer, evitando un desbordamiento aritmético sin signo en los marcos que exceden un búfer en 1 a 3 bytes. En los marcos de un solo búfer, el programa XDP no debe ver el FCS, por lo que se elimina del búfer XDP antes de ejecutar el programa.

El XDP nativo solo admite actualmente marcos de un solo búfer (lineales). Un marco de tamaño excesivo aceptado por el MAC (jumbo habilitado) se recibe a través de buffer2; el programa XDP solo ve buffer1, por lo que, ante un veredicto TX/REDIRECT, el marco se reenvía truncado. El soporte de XDP multi-buffer para gestionar este caso está previsto como trabajo posterior.

La recepción RX de zero-copy de AF_XDP no está cubierta por este cambio: una cola ZC sigue programando buffer2 en la dirección DMA 0 (y XGMAC no tiene el bit de buffer2 válido), por lo que un marco de tamaño excesivo que desborde buffer1 aún puede provocar el mismo fallo de traducción de SMMU. Su gestión está prevista como trabajo posterior.

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
5
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 3 referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-98803",
  "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": "88ebe2cf7f3fc9da95e0f06483fd58da3e67e675",
              "lessThan": "358d5ac5a5d57ce21c3814c4e3e8f3fbcb7304b4",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "88ebe2cf7f3fc9da95e0f06483fd58da3e67e675",
              "lessThan": "a7cff44543f66f3a19151060cb549691d191d44c",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "88ebe2cf7f3fc9da95e0f06483fd58da3e67e675",
              "lessThan": "88095728511e0df9c89528944f5a1762ad298983",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "c4b712d1a814a0535091d99e6cf04d69ac42ef7b",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "5.4.262",
              "lessThan": "5.5",
              "versionType": "semver"
            }
          ],
          "programFiles": [
            "drivers/net/ethernet/stmicro/stmmac/stmmac_main.c"
          ],
          "defaultStatus": "unaffected"
        },
        {
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "product": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.5"
            },
            {
              "status": "unaffected",
              "version": "0",
              "lessThan": "5.5",
              "versionType": "semver"
            },
            {
              "status": "unaffected",
              "version": "6.18.56",
              "versionType": "semver",
              "lessThanOrEqual": "6.18.*"
            },
            {
              "status": "unaffected",
              "version": "7.2.10",
              "versionType": "semver",
              "lessThanOrEqual": "7.2.*"
            },
            {
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix",
              "lessThanOrEqual": "*"
            }
          ],
          "programFiles": [
            "drivers/net/ethernet/stmicro/stmmac/stmmac_main.c"
          ],
          "defaultStatus": "affected"
        }
      ]
    }
  ],
  "published": "2026-10-18T16:17:34.350",
  "references": [
    {
      "url": "https://git.kernel.org/stable/c/358d5ac5a5d57ce21c3814c4e3e8f3fbcb7304b4",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/88095728511e0df9c89528944f5a1762ad298983",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/a7cff44543f66f3a19151060cb549691d191d44c",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ],
  "vulnStatus": "Received",
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: stmmac: fix rx Scatter-Gather support\n\nWhen a received frame is larger than dma_buf_sz, the DMA scatters it\nacross multiple RX descriptors (rx Scatter-Gather). The secondary RX\nbuffer (sec_page) was only allocated and programmed when split-header\n(SPH) was active, so for regular frames buffer2 was neither allocated\nnor backed by a valid mapping. As soon as an incoming frame overflowed\nbuffer1, the DMA wrote the overflow into the unmapped secondary-buffer\naddress, triggering an SMMU translation fault on IOMMU-based platforms:\n\narm-smmu 15000000.iommu: Unhandled context fault: fsr=0x402, iova=0x00000000, fsynr=0x7f0011, cbfrsynra=0x1c90, cb=11\narm-smmu 15000000.iommu: FSR    = 00000402 [Format=2 TF], SID=0x1c90\narm-smmu 15000000.iommu: FSYNR0 = 007f0011 [S1CBNDX=127 WNR PLVL=1]\n\nEnable scatter-gather for non-SPH frames on cores that can program an\nindependent secondary RX buffer (GMAC4/XGMAC): allocate and mark buffer2\nas valid in stmmac_init_rx_buffers() and stmmac_rx_refill(), and account\nfor it in the buffer length computation. Legacy cores have no set_sec_addr\nop, so they keep buffer2 disabled.\n\nSince buffer2 is handed to the DMA at page offset 0, the page pool sync\nwindow is widened to cover both buffers in every mode: offset is set to 0\nand max_len to dma_buf_sz + stmmac_rx_offset().\n\nThe FCS can straddle the buffer1/buffer2 boundary and a descriptor\nboundary, so it is now stripped from the tail of the assembled frame with\npskb_trim() instead of from a single buffer, avoiding an unsigned underflow\nfor frames that overflow a buffer by 1..3 bytes. For single-buffer frames\nthe XDP program must not see the FCS, so it is removed from the XDP buffer\nbefore the program runs.\n\nNative XDP currently only supports single-buffer (linear) frames. An\noversized frame accepted by the MAC (jumbo enabled) is received via\nbuffer2; the XDP program only sees buffer1, so on a TX/REDIRECT verdict\nthe frame is forwarded truncated. XDP multi-buffer support to handle\nthis case is planned as a follow-up.\n\nAF_XDP zero-copy RX is not covered by this change: a ZC queue still\nprograms buffer2 at DMA address 0 (and XGMAC has no buffer2-valid bit),\nso an oversized frame overflowing buffer1 can still trigger the same\nSMMU translation fault. Handling is planned as a follow-up."
    }
  ],
  "lastModified": "2026-10-19T10:19:44.350",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}