Skip to content
Heist/ feed
Back to feed
HighFix available

clsact: Fix use-after-free in init/destroy rollback asymmetry

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: clsact: Fix use-after-free in init/destroy rollback asymmetry Fix a use-after-free in the clsact qdisc upon init/destroy rollback asymmetry. The latter is achieved by first fully initializing a clsact instance, and then in a second step having a replacement failure for the new clsact qdisc instance. clsact_init() initializes ingress first and then takes care of the egress part. This can fail midway, for example, via tcf_block_get_ext(). Upon failure, the kernel will trigger the clsact_destroy() callback. Commit 1cb6f0bae504 ("bpf: Fix too early release of tcx_entry") details the way how the transition is happening. If tcf_block_get_ext on the q->ingress_block ends up failing, we took the tcx_miniq_inc reference count on the ingress side, but not yet on the egress side. clsact_destroy() tests whether the {ingress,egress}_entry was non-NULL. However, even in midway failure on the replacement, both are in fact non-NULL with a valid egress_entry from the previous clsact instance. What we really need to test for is whether the qdisc instance-specific ingress or egress side previously got initialized. This adds a small helper for checking the miniq initialization called mini_qdisc_pair_inited, and utilizes that upon clsact_destroy() in order to fix the use-after-free scenario. Convert the ingress_destroy() side as well so both are consistent to each other.

Products
Kernel
Affected versions
Not specified
Fixed versions
6.12.78, 6.18.20, 6.19.10, 6.6.130
CVEs
CVE-2026-23413
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 10:12 UTC · Revision 1

Source evidence

clsact: Fix use-after-free in init/destroy rollback asymmetry

core-osv · Original source

Published 2 Apr 2026, 11:40 UTC

In the Linux kernel, the following vulnerability has been resolved: clsact: Fix use-after-free in init/destroy rollback asymmetry Fix a use-after-free in the clsact qdisc upon init/destroy rollback asymmetry. The latter is achieved by first fully initializing a clsact instance, and then in a second step having a replacement failure for the new clsact qdisc instance. clsact_init() initializes ingress first and then takes care of the egress part. This can fail midway, for example, via tcf_block_get_ext(). Upon failure, the kernel will trigger the clsact_destroy() callback. Commit 1cb6f0bae504 ("bpf: Fix too early release of tcx_entry") details the way how the transition is happening. If tcf_block_get_ext on the q->ingress_block ends up failing, we took the tcx_miniq_inc reference count on the ingress side, but not yet on the egress side. clsact_destroy() tests whether the {ingress,egress}_entry was non-NULL. However, even in midway failure on the replacement, both are in fact non-NULL with a valid egress_entry from the previous clsact instance. What we really need to test for is whether the qdisc instance-specific ingress or egress side previously got initialized. This adds a small helper for checking the miniq initialization called mini_qdisc_pair_inited, and utilizes that upon clsact_destroy() in order to fix the use-after-free scenario. Convert the ingress_destroy() side as well so both are consistent to each other.

osv:CVE-2026-23413

Kernel

Fixed versions: 6.6.130, 6.12.78, 6.18.20, 6.19.10

Complete source record
{
  "id": "eb0f5c1797f6029b6e36d94131a8b962458970619da6a010cf274d9a78ed2ae2",
  "url": "https://osv.dev/vulnerability/CVE-2026-23413",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "clsact: Fix use-after-free in init/destroy rollback asymmetry",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: clsact: Fix use-after-free in init/destroy rollback asymmetry Fix a use-after-free in the clsact qdisc upon init/destroy rollback asymmetry. The latter is achieved by first fully initializing a clsact instance, and then in a second step having a replacement failure for the new clsact qdisc instance. clsact_init() initializes ingress first and then takes care of the egress part. This can fail midway, for example, via tcf_block_get_ext(). Upon failure, the kernel will trigger the clsact_destroy() callback. Commit 1cb6f0bae504 (\"bpf: Fix too early release of tcx_entry\") details the way how the transition is happening. If tcf_block_get_ext on the q->ingress_block ends up failing, we took the tcx_miniq_inc reference count on the ingress side, but not yet on the egress side. clsact_destroy() tests whether the {ingress,egress}_entry was non-NULL. However, even in midway failure on the replacement, both are in fact non-NULL with a valid egress_entry from the previous clsact instance. What we really need to test for is whether the qdisc instance-specific ingress or egress side previously got initialized. This adds a small helper for checking the miniq initialization called mini_qdisc_pair_inited, and utilizes that upon clsact_destroy() in order to fix the use-after-free scenario. Convert the ingress_destroy() side as well so both are consistent to each other.",
    "evidence": "osv:CVE-2026-23413",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "6.6.130",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.12.78",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.20",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.19.10",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-23413",
      "aliases": [
        "CVE-2026-23413"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "230bb13650b0f186f540500fd5f5f7096a822a2a"
                },
                {
                  "fixed": "a73d95b57bf9faebdfed591bcb7ed9292062a84c"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "1cb6f0bae50441f4b4b32a28315853b279c7404e"
                },
                {
                  "fixed": "37bef86e5428d59f70a4da82b80f9a8f252fecbe"
                },
                {
                  "fixed": "4c9af67f99aa3e51b522c54968ab3ac8272be41c"
                },
                {
                  "fixed": "0509b762bc5e8ea7b8391130730c6d8502fc6e69"
                },
                {
                  "fixed": "a0671125d4f55e1e98d9bde8a0b671941987e208"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6.6.41"
                },
                {
                  "fixed": "6.6.130"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6.9.10"
                },
                {
                  "fixed": "6.10"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "f61ecf1bd5b562ebfd7d430ccb31619857e80857"
                }
              ]
            }
          ],
          "versions": [
            "v6.6.129",
            "v6.6.128",
            "v6.6.127",
            "v6.6.126",
            "v6.6.125",
            "v6.6.124",
            "v6.6.123",
            "v6.6.122",
            "v6.6.121",
            "v6.6.120",
            "v6.6.119",
            "v6.6.118",
            "v6.6.117",
            "v6.6.116",
            "v6.6.115",
            "v6.6.114",
            "v6.6.113",
            "v6.6.112",
            "v6.6.111",
            "v6.6.110",
            "v6.6.109",
            "v6.6.108",
            "v6.6.107",
            "v6.6.106",
            "v6.6.105",
            "v6.6.104",
            "v6.6.103",
            "v6.6.102",
            "v6.6.101",
            "v6.6.100",
            "v6.6.99",
            "v6.6.98",
            "v6.6.97",
            "v6.6.96",
            "v6.6.95",
            "v6.6.94",
            "v6.6.93",
            "v6.6.92",
            "v6.6.91",
            "v6.6.90",
            "v6.6.89",
            "v6.6.88",
            "v6.6.87",
            "v6.6.86",
            "v6.6.85",
            "v6.6.84",
            "v6.6.83",
            "v6.6.82",
            "v6.6.81",
            "v6.6.80",
            "v6.6.79",
            "v6.6.78",
            "v6.6.77",
            "v6.6.76",
            "v6.6.75",
            "v6.6.74",
            "v6.6.73",
            "v6.6.72",
            "v6.6.71",
            "v6.6.70",
            "v6.6.69",
            "v6.6.68",
            "v6.6.67",
            "v6.6.66",
            "v6.6.65",
            "v6.6.64",
            "v6.6.63",
            "v6.6.62",
            "v6.6.61",
            "v6.6.60",
            "v6.6.59",
            "v6.6.58",
            "v6.6.57",
            "v6.6.56",
            "v6.6.55",
            "v6.6.54",
            "v6.6.53",
            "v6.6.52",
            "v6.6.51",
            "v6.6.50",
            "v6.6.49",
            "v6.6.48",
            "v6.6.47",
            "v6.6.46",
            "v6.6.45",
            "v6.6.44",
            "v6.6.43",
            "v6.6.42",
            "v6.6.41",
            "v6.9.12",
            "v6.9.11",
            "v6.9.10"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23413.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "6.6.130"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.7.0"
                },
                {
                  "fixed": "6.12.78"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.10.0"
                },
                {
                  "fixed": "6.18.20"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.19.10"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23413.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:27.652202695Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/0509b762bc5e8ea7b8391130730c6d8502fc6e69",
        "https://git.kernel.org/stable/c/37bef86e5428d59f70a4da82b80f9a8f252fecbe",
        "https://git.kernel.org/stable/c/4c9af67f99aa3e51b522c54968ab3ac8272be41c",
        "https://git.kernel.org/stable/c/a0671125d4f55e1e98d9bde8a0b671941987e208",
        "https://git.kernel.org/stable/c/a73d95b57bf9faebdfed591bcb7ed9292062a84c",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/23xxx/CVE-2026-23413.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-23413",
        "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
      ],
      "provider_metadata": {
        "cna_assigner": "Linux",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/23xxx/CVE-2026-23413.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-23413",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 494420,
  "published_at": "2026-04-02T11:40:54.384+00:00"
}