CVE-2026-98230 (GCVE-0-2026-98230)

Vulnerability from cvelistv5 – Published: 2026-10-06 08:45 – Updated: 2026-10-19 09:16
VLAI
Title
xfrm: use hlist_del_init_rcu for state_cache and state_cache_input
Summary
In the Linux kernel, the following vulnerability has been resolved: xfrm: use hlist_del_init_rcu for state_cache and state_cache_input Commit 14acf9652e56 ("xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete") converted bydst/bysrc/byseq/byspi from hlist_del_rcu() to hlist_del_init_rcu() so that a second __xfrm_state_delete() on the same object becomes a no-op rather than a write through LIST_POISON pprev. It missed state_cache and state_cache_input, which kept hlist_del_rcu(): - hlist_del_rcu() leaves pprev = LIST_POISON2 (non-NULL), so hlist_unhashed() returns false. - hlist_del_init_rcu() leaves pprev = NULL, so hlist_unhashed() returns true. A second __xfrm_state_delete() therefore enters __hlist_del() on the already-deleted state_cache/state_cache_input nodes and does WRITE_ONCE(*pprev, next) through LIST_POISON2 — a write use-after-free once the slab is reused. The corruption can in turn cause a subsequent hlist_for_each_entry_rcu traversal to follow a dangling next pointer, producing the read use-after-free reported in xfrm_input_state_lookup(). Switch state_cache and state_cache_input to hlist_del_init_rcu() to match the other four lists, closing the write use-after-free and, with it, the read use-after-free it spawns.
Assigner
Linux CNA under the mitre root
CNA scorecard D 53/100 over 7056 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: aa48a18fdb0911572d133057cd579db704b87da4 , < fb38fb7420d5f7192f9e2b6ac835ede149cd7ac5 (git)
Affected: 0045e3d80613cc7174dc15f189ee6fc4e73b9365 , < 4748c27e2e6a1969e02f1df46e62f79d2799b80b (git)
Affected: 0045e3d80613cc7174dc15f189ee6fc4e73b9365 , < 9b74a47a4cbd0d29faff4f3b199212c73e6b6220 (git)
Affected: 0045e3d80613cc7174dc15f189ee6fc4e73b9365 , < 2afb8dc1f4390f164db8352f8e685e126e9db566 (git)
Affected: 5e4334dc39443645415450163ff5ff1ee7e79784 (git)
Affected: 6.12.13 , < 6.12.112 (semver)
guessed Create a notification for this product.
Linux Linux Affected: 6.13
Unaffected: 0 , < 6.13 (semver)
Unaffected: 6.12.112 , ≤ 6.12.* (semver)
Unaffected: 6.18.54 , ≤ 6.18.* (semver)
Unaffected: 7.2.8 , ≤ 7.2.* (semver)
Unaffected: 7.3 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/xfrm/xfrm_state.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "fb38fb7420d5f7192f9e2b6ac835ede149cd7ac5",
              "status": "affected",
              "version": "aa48a18fdb0911572d133057cd579db704b87da4",
              "versionType": "git"
            },
            {
              "lessThan": "4748c27e2e6a1969e02f1df46e62f79d2799b80b",
              "status": "affected",
              "version": "0045e3d80613cc7174dc15f189ee6fc4e73b9365",
              "versionType": "git"
            },
            {
              "lessThan": "9b74a47a4cbd0d29faff4f3b199212c73e6b6220",
              "status": "affected",
              "version": "0045e3d80613cc7174dc15f189ee6fc4e73b9365",
              "versionType": "git"
            },
            {
              "lessThan": "2afb8dc1f4390f164db8352f8e685e126e9db566",
              "status": "affected",
              "version": "0045e3d80613cc7174dc15f189ee6fc4e73b9365",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "5e4334dc39443645415450163ff5ff1ee7e79784",
              "versionType": "git"
            },
            {
              "lessThan": "6.12.112",
              "status": "affected",
              "version": "6.12.13",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/xfrm/xfrm_state.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.13"
            },
            {
              "lessThan": "6.13",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.112",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.54",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.8",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.112",
                  "versionStartIncluding": "6.12.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.54",
                  "versionStartIncluding": "6.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.8",
                  "versionStartIncluding": "6.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.13",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfrm: use hlist_del_init_rcu for state_cache and state_cache_input\n\nCommit 14acf9652e56 (\"xfrm: defensively unhash xfrm_state lists in\n__xfrm_state_delete\") converted bydst/bysrc/byseq/byspi from\nhlist_del_rcu() to hlist_del_init_rcu() so that a second\n__xfrm_state_delete() on the same object becomes a no-op rather than a\nwrite through LIST_POISON pprev. It missed state_cache and\nstate_cache_input, which kept hlist_del_rcu():\n\n- hlist_del_rcu() leaves pprev = LIST_POISON2 (non-NULL), so\n  hlist_unhashed() returns false.\n- hlist_del_init_rcu() leaves pprev = NULL, so hlist_unhashed()\n  returns true.\n\nA second __xfrm_state_delete() therefore enters __hlist_del() on the\nalready-deleted state_cache/state_cache_input nodes and does\nWRITE_ONCE(*pprev, next) through LIST_POISON2 \u2014 a write use-after-free\nonce the slab is reused. The corruption can in turn cause a subsequent\nhlist_for_each_entry_rcu traversal to follow a dangling next pointer,\nproducing the read use-after-free reported in xfrm_input_state_lookup().\n\nSwitch state_cache and state_cache_input to hlist_del_init_rcu() to\nmatch the other four lists, closing the write use-after-free and, with\nit, the read use-after-free it spawns."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The bad unlink is in __xfrm_state_delete(), reached when SAs are removed via XFRM_MSG_DELSA/FLUSHSA/EXPIRE over NETLINK_XFRM or the af_key socket, or via xfrm_timer_handler expiry. ESP packets only walk state_cache_input in xfrm_input_state_lookup() and carry no malformed data that causes the double unlink, so the vector is local.\nAC:H - A second unlink needs __xfrm_state_delete() to see a non-DEAD state that was already removed, but every caller holds x-\u003elock and checks km.state. The only path found that skips the VALID check is mlx5e_ipsec_handle_event(), which calls xfrm_state_check_expire() on a hardware hard-limit event and needs mlx5 packet offload, so the attacker cannot reliably arrange it.\nPR:L - Adding, expiring and flushing SAs over NETLINK_XFRM needs CAP_NET_ADMIN only in the user namespace that owns the netns. An unprivileged user gets it with unshare -Urn, and each netns has its own state_cache_input percpu lists and xfrm_state_lock.\nUI:N - The attacker drives the SA lifecycle (add, expire, delete, flush) and the traffic that fills the state caches themselves. No other user has to do anything.\nS:U - The corrupted hlist nodes are inside struct xfrm_state in kernel slab memory, so the impact stays within the kernel\u0027s own security authority.\nC:H - After the stale-pprev unlink, the state_cache_input chain can keep a freed xfrm_state, which hlist_for_each_entry_rcu in xfrm_input_state_lookup() then dereferences (the read UAF the commit reports). With slab reuse, an attacker can control the contents of that object.\nI:H - __hlist_del() on an already-unlinked state_cache/state_cache_input node does WRITE_ONCE(*pprev, next) through a stale pointer, a write use-after-free into reused slab memory that corrupts RCU hash-chain linkage.\nA:H - Writing through LIST_POISON2, or walking the corrupted per-CPU state_cache_input or policy state_cache_list chain, causes a general protection fault or KASAN oops in softirq or netns cleanup context, which takes down the kernel."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-19T09:16:02.121Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/fb38fb7420d5f7192f9e2b6ac835ede149cd7ac5"
        },
        {
          "url": "https://git.kernel.org/stable/c/4748c27e2e6a1969e02f1df46e62f79d2799b80b"
        },
        {
          "url": "https://git.kernel.org/stable/c/9b74a47a4cbd0d29faff4f3b199212c73e6b6220"
        },
        {
          "url": "https://git.kernel.org/stable/c/2afb8dc1f4390f164db8352f8e685e126e9db566"
        }
      ],
      "title": "xfrm: use hlist_del_init_rcu for state_cache and state_cache_input",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-98230",
    "datePublished": "2026-10-06T08:45:04.548Z",
    "dateReserved": "2026-09-25T10:25:14.328Z",
    "dateUpdated": "2026-10-19T09:16:02.121Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-98230",
      "date": "2026-10-25",
      "epss": "0.00118",
      "percentile": "0.01706"
    },
    "microsoft_vex": {
      "current_release_date": "2026-10-21T18:33:44.000Z",
      "cve": "CVE-2026-98230",
      "id": "msrc_CVE-2026-98230",
      "initial_release_date": "2026-10-20T22:23:24.000Z",
      "product_status:under_investigation": "1",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "xfrm: use hlist_del_init_rcu for state_cache and state_cache_input",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-98230.json",
      "version": "2"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "net/xfrm/xfrm_state.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "fb38fb7420d5f7192f9e2b6ac835ede149cd7ac5",
                    "status": "affected",
                    "version": "aa48a18fdb0911572d133057cd579db704b87da4",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "4748c27e2e6a1969e02f1df46e62f79d2799b80b",
                    "status": "affected",
                    "version": "0045e3d80613cc7174dc15f189ee6fc4e73b9365",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "9b74a47a4cbd0d29faff4f3b199212c73e6b6220",
                    "status": "affected",
                    "version": "0045e3d80613cc7174dc15f189ee6fc4e73b9365",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2afb8dc1f4390f164db8352f8e685e126e9db566",
                    "status": "affected",
                    "version": "0045e3d80613cc7174dc15f189ee6fc4e73b9365",
                    "versionType": "git"
                  },
                  {
                    "status": "affected",
                    "version": "5e4334dc39443645415450163ff5ff1ee7e79784",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "6.12.112",
                    "status": "affected",
                    "version": "6.12.13",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "net/xfrm/xfrm_state.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.13"
                  },
                  {
                    "lessThan": "6.13",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.112",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.54",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.8",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfrm: use hlist_del_init_rcu for state_cache and state_cache_input\n\nCommit 14acf9652e56 (\"xfrm: defensively unhash xfrm_state lists in\n__xfrm_state_delete\") converted bydst/bysrc/byseq/byspi from\nhlist_del_rcu() to hlist_del_init_rcu() so that a second\n__xfrm_state_delete() on the same object becomes a no-op rather than a\nwrite through LIST_POISON pprev. It missed state_cache and\nstate_cache_input, which kept hlist_del_rcu():\n\n- hlist_del_rcu() leaves pprev = LIST_POISON2 (non-NULL), so\n  hlist_unhashed() returns false.\n- hlist_del_init_rcu() leaves pprev = NULL, so hlist_unhashed()\n  returns true.\n\nA second __xfrm_state_delete() therefore enters __hlist_del() on the\nalready-deleted state_cache/state_cache_input nodes and does\nWRITE_ONCE(*pprev, next) through LIST_POISON2 \u2014 a write use-after-free\nonce the slab is reused. The corruption can in turn cause a subsequent\nhlist_for_each_entry_rcu traversal to follow a dangling next pointer,\nproducing the read use-after-free reported in xfrm_input_state_lookup().\n\nSwitch state_cache and state_cache_input to hlist_del_init_rcu() to\nmatch the other four lists, closing the write use-after-free and, with\nit, the read use-after-free it spawns."
          }
        ],
        "id": "CVE-2026-98230",
        "lastModified": "2026-10-19T10:18:23.767",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "HIGH",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.0,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.0,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-10-06T09:18:10.397",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2afb8dc1f4390f164db8352f8e685e126e9db566"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/4748c27e2e6a1969e02f1df46e62f79d2799b80b"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/9b74a47a4cbd0d29faff4f3b199212c73e6b6220"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/fb38fb7420d5f7192f9e2b6ac835ede149cd7ac5"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-10-18T08:22:59+00:00",
      "cve": "CVE-2026-98230",
      "id": "CVE-2026-98230",
      "initial_release_date": "2026-10-06T00:00:00+00:00",
      "product_status:known_affected": "14",
      "product_status:known_not_affected": "263",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: xfrm: use hlist_del_init_rcu for state_cache and state_cache_input",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-98230.json",
      "version": "3"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

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.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.