← Back to CVE Explorer

CVE-2025-68770

Full vulnerability record from the local CVENow database.

Description

In the Linux kernel, the following vulnerability has been resolved: bnxt_en: Fix XDP_TX path For XDP_TX action in bnxt_rx_xdp(), clearing of the event flags is not correct. __bnxt_poll_work() -> bnxt_rx_pkt() -> bnxt_rx_xdp() may be looping within NAPI and some event flags may be set in earlier iterations. In particular, if BNXT_TX_EVENT is set earlier indicating some XDP_TX packets are ready and pending, it will be cleared if it is XDP_TX action again. Normally, we will set BNXT_TX_EVENT again when we successfully call __bnxt_xmit_xdp(). But if the TX ring has no more room, the flag will not be set. This will cause the TX producer to be ahead but the driver will not hit the TX doorbell. For multi-buf XDP_TX, there is no need to clear the event flags and set BNXT_AGG_EVENT. The BNXT_AGG_EVENT flag should have been set earlier in bnxt_rx_pkt(). The visible symptom of this is that the RX ring associated with the TX XDP ring will eventually become empty and all packets will be dropped. Because this condition will cause the driver to not refill the RX ring seeing that the TX ring has forever pending XDP_TX packets. The fix is to only clear BNXT_RX_EVENT when we have successfully called __bnxt_xmit_xdp().

Severity
HIGH
CVSS score
7.5 (v3.1)
Vulnerability status
Deferred
Source identifier
416baaa9-dc9f-4396-8d5f-8c081fb06d67
Published
2026-01-13 16:15:56.473000
Last modified
2026-10-19 19:17:04.390000
View original CVE JSON
{
  "id": "CVE-2025-68770",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
  "published": "2026-01-13T16:15:56.473",
  "lastModified": "2026-10-19T19:17:04.390",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbnxt_en: Fix XDP_TX path\n\nFor XDP_TX action in bnxt_rx_xdp(), clearing of the event flags is not\ncorrect.  __bnxt_poll_work() -> bnxt_rx_pkt() -> bnxt_rx_xdp() may be\nlooping within NAPI and some event flags may be set in earlier\niterations.  In particular, if BNXT_TX_EVENT is set earlier indicating\nsome XDP_TX packets are ready and pending, it will be cleared if it is\nXDP_TX action again.  Normally, we will set BNXT_TX_EVENT again when we\nsuccessfully call __bnxt_xmit_xdp().  But if the TX ring has no more\nroom, the flag will not be set.  This will cause the TX producer to be\nahead but the driver will not hit the TX doorbell.\n\nFor multi-buf XDP_TX, there is no need to clear the event flags and set\nBNXT_AGG_EVENT.  The BNXT_AGG_EVENT flag should have been set earlier in\nbnxt_rx_pkt().\n\nThe visible symptom of this is that the RX ring associated with the\nTX XDP ring will eventually become empty and all packets will be dropped.\nBecause this condition will cause the driver to not refill the RX ring\nseeing that the TX ring has forever pending XDP_TX packets.\n\nThe fix is to only clear BNXT_RX_EVENT when we have successfully\ncalled __bnxt_xmit_xdp()."
    },
    {
      "lang": "es",
      "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nbnxt_en: Corrección de la ruta XDP_TX\n\nPara la acción XDP_TX en bnxt_rx_xdp(), la limpieza de los indicadores de evento no es correcta. __bnxt_poll_work() -> bnxt_rx_pkt() -> bnxt_rx_xdp() puede estar en un bucle dentro de NAPI y algunos indicadores de evento pueden haber sido establecidos en iteraciones anteriores. En particular, si BNXT_TX_EVENT se establece antes indicando que algunos paquetes XDP_TX están listos y pendientes, se borrará si es una acción XDP_TX de nuevo. Normalmente, estableceremos BNXT_TX_EVENT de nuevo cuando llamemos con éxito a __bnxt_xmit_xdp(). Pero si el anillo TX no tiene más espacio, el indicador no se establecerá. Esto hará que el productor TX se adelante, pero el controlador no activará el TX doorbell.\n\nPara XDP_TX de múltiples búferes, no es necesario borrar los indicadores de evento y establecer BNXT_AGG_EVENT. El indicador BNXT_AGG_EVENT debería haberse establecido antes en bnxt_rx_pkt().\n\nEl síntoma visible de esto es que el anillo RX asociado con el anillo TX XDP eventualmente quedará vacío y todos los paquetes se descartarán. Porque esta condición hará que el controlador no rellene el anillo RX al ver que el anillo TX tiene paquetes XDP_TX pendientes indefinidamente.\n\nLa solución es borrar BNXT_RX_EVENT solo cuando hayamos llamado con éxito a __bnxt_xmit_xdp()."
    }
  ],
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "unaffected",
          "programFiles": [
            "drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "7f0a168b0441ef7fd6b46563efb2706c58ac2a4c",
              "lessThan": "4b83902a1e67ff327ab5c6c65021a03e72c081d6",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "7f0a168b0441ef7fd6b46563efb2706c58ac2a4c",
              "lessThan": "f17e0c1208485b24d61271bc1ddc8f2087e71561",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "7f0a168b0441ef7fd6b46563efb2706c58ac2a4c",
              "lessThan": "0373d5c387f24de749cc22e694a14b3a7c7eb515",
              "versionType": "git",
              "status": "affected"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "affected",
          "programFiles": [
            "drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "6.8",
              "status": "affected"
            },
            {
              "version": "0",
              "lessThan": "6.8",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.12.64",
              "lessThanOrEqual": "6.12.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.18.3",
              "lessThanOrEqual": "6.18.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.19",
              "lessThanOrEqual": "*",
              "versionType": "original_commit_for_fix",
              "status": "unaffected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
          "baseScore": 7.5,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "NONE",
          "integrityImpact": "NONE",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 3.6
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-10-16T15:05:09.771100Z",
          "id": "CVE-2025-68770",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-667"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://git.kernel.org/stable/c/0373d5c387f24de749cc22e694a14b3a7c7eb515",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/4b83902a1e67ff327ab5c6c65021a03e72c081d6",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/f17e0c1208485b24d61271bc1ddc8f2087e71561",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ]
}