Skip to content
Heist/ feed
Back to feed
HighFix available

net: nexthop: fix percpu use-after-free in remove_nh_grp_entry

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: net: nexthop: fix percpu use-after-free in remove_nh_grp_entry When removing a nexthop from a group, remove_nh_grp_entry() publishes the new group via rcu_assign_pointer() then immediately frees the removed entry's percpu stats with free_percpu(). However, the synchronize_net() grace period in the caller remove_nexthop_from_groups() runs after the free. RCU readers that entered before the publish still see the old group and can dereference the freed stats via nh_grp_entry_stats_inc() -> get_cpu_ptr(nhge->stats), causing a use-after-free on percpu memory. Fix by deferring the free_percpu() until after synchronize_net() in the caller. Removed entries are chained via nh_list onto a local deferred free list. After the grace period completes and all RCU readers have finished, the percpu stats are safely freed.

Products
Kernel
Affected versions
Not specified
Fixed versions
6.12.78, 6.18.19, 6.19.9
CVEs
CVE-2026-43374
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 01:24 UTC · Revision 1

Source evidence

net: nexthop: fix percpu use-after-free in remove_nh_grp_entry

core-osv · Original source

Published 8 May 2026, 14:21 UTC

In the Linux kernel, the following vulnerability has been resolved: net: nexthop: fix percpu use-after-free in remove_nh_grp_entry When removing a nexthop from a group, remove_nh_grp_entry() publishes the new group via rcu_assign_pointer() then immediately frees the removed entry's percpu stats with free_percpu(). However, the synchronize_net() grace period in the caller remove_nexthop_from_groups() runs after the free. RCU readers that entered before the publish still see the old group and can dereference the freed stats via nh_grp_entry_stats_inc() -> get_cpu_ptr(nhge->stats), causing a use-after-free on percpu memory. Fix by deferring the free_percpu() until after synchronize_net() in the caller. Removed entries are chained via nh_list onto a local deferred free list. After the grace period completes and all RCU readers have finished, the percpu stats are safely freed.

osv:CVE-2026-43374

Kernel

Fixed versions: 6.12.78, 6.18.19, 6.19.9

Complete source record
{
  "id": "67e0839d90456b1711b2357a08cefd2eaf159fcf8b67dff37bb7fd813d002f5b",
  "url": "https://osv.dev/vulnerability/CVE-2026-43374",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "net: nexthop: fix percpu use-after-free in remove_nh_grp_entry",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: net: nexthop: fix percpu use-after-free in remove_nh_grp_entry When removing a nexthop from a group, remove_nh_grp_entry() publishes the new group via rcu_assign_pointer() then immediately frees the removed entry's percpu stats with free_percpu(). However, the synchronize_net() grace period in the caller remove_nexthop_from_groups() runs after the free. RCU readers that entered before the publish still see the old group and can dereference the freed stats via nh_grp_entry_stats_inc() -> get_cpu_ptr(nhge->stats), causing a use-after-free on percpu memory. Fix by deferring the free_percpu() until after synchronize_net() in the caller. Removed entries are chained via nh_list onto a local deferred free list. After the grace period completes and all RCU readers have finished, the percpu stats are safely freed.",
    "evidence": "osv:CVE-2026-43374",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "6.12.78",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.19",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.19.9",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-43374",
      "aliases": [
        "CVE-2026-43374"
      ],
      "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": "f4676ea74b8549cd88dbfe2a592ce4530039e61f"
                },
                {
                  "fixed": "abf4feaee6405f1441929c6ebe7a250f2cd170a7"
                },
                {
                  "fixed": "ab5ebab9664214ba41a7633cb4e72f128204f924"
                },
                {
                  "fixed": "9e08ad731862b22a87cc55f752e16d66cdc9e231"
                },
                {
                  "fixed": "b2662e7593e94ae09b1cf7ee5f09160a3612bcb2"
                }
              ]
            }
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-43374.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.9.0"
                },
                {
                  "fixed": "6.12.78"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.18.19"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.19.0"
                },
                {
                  "fixed": "6.19.9"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-43374.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:24.912592115Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/9e08ad731862b22a87cc55f752e16d66cdc9e231",
        "https://git.kernel.org/stable/c/ab5ebab9664214ba41a7633cb4e72f128204f924",
        "https://git.kernel.org/stable/c/abf4feaee6405f1441929c6ebe7a250f2cd170a7",
        "https://git.kernel.org/stable/c/b2662e7593e94ae09b1cf7ee5f09160a3612bcb2",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/43xxx/CVE-2026-43374.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-43374",
        "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/43xxx/CVE-2026-43374.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-43374",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 491616,
  "published_at": "2026-05-08T14:21:24.537+00:00"
}