Skip to content
Heist/ feed
Back to feed
HighFix available

netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst The br_netfilter fake rtable is embedded in struct net_bridge and is attached to bridged packets with skb_dst_set_noref(). If such a packet is queued to NFQUEUE, __nf_queue() upgrades that fake dst with skb_dst_force(). At that point the queued skb can hold a real dst reference after bridge teardown has started. The problem is not that every bridged packet needs its own dst reference. The problem is that NFQUEUE can keep the bridge private fake dst alive after unregister begins. Fix this by keeping the bridge fake dst model unchanged and pinning the bridge master device only while the packet sits in NFQUEUE. Record the bridge device in nf_queue_entry when the queued skb carries a bridge fake dst, take a device reference for the queue lifetime, and drop it when the queue entry is freed. Also make sure queued entries are reaped when that bridge device goes down, and drop the redundant nf_bridge_info_exists() test from the fake dst detection. This keeps netdev_priv(br->dev) alive until verdict completion, so the embedded fake rtable and its metrics backing storage cannot be freed out from under dst_release(). It also avoids the constant refcount bump and avoids using ipv4-specific dst helpers for IPv6 bridge traffic.

Products
Kernel
Affected versions
Not specified
Fixed versions
5.10.270, 5.15.217, 6.1.178, 6.12.97, 6.18.40, 6.6.145, 7.1.5
CVEs
CVE-2026-72255
Confirmed fixed CVEs
Not specified
Updated in this feed
6 Nov 2026, 02:36 UTC · Revision 1

Source evidence

netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst

core-osv · Original source

Published 15 Aug 2026, 05:54 UTC

In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst The br_netfilter fake rtable is embedded in struct net_bridge and is attached to bridged packets with skb_dst_set_noref(). If such a packet is queued to NFQUEUE, __nf_queue() upgrades that fake dst with skb_dst_force(). At that point the queued skb can hold a real dst reference after bridge teardown has started. The problem is not that every bridged packet needs its own dst reference. The problem is that NFQUEUE can keep the bridge private fake dst alive after unregister begins. Fix this by keeping the bridge fake dst model unchanged and pinning the bridge master device only while the packet sits in NFQUEUE. Record the bridge device in nf_queue_entry when the queued skb carries a bridge fake dst, take a device reference for the queue lifetime, and drop it when the queue entry is freed. Also make sure queued entries are reaped when that bridge device goes down, and drop the redundant nf_bridge_info_exists() test from the fake dst detection. This keeps netdev_priv(br->dev) alive until verdict completion, so the embedded fake rtable and its metrics backing storage cannot be freed out from under dst_release(). It also avoids the constant refcount bump and avoids using ipv4-specific dst helpers for IPv6 bridge traffic.

osv:CVE-2026-72255

Kernel

Fixed versions: 5.10.270, 5.15.217, 6.1.178, 6.6.145, 6.12.97, 6.18.40, 7.1.5

Complete source record
{
  "id": "0fd862df78a404d55a46dcaf71e82e7e365666d98aed0fd6b90175afb1d4160d",
  "url": "https://osv.dev/vulnerability/CVE-2026-72255",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst The br_netfilter fake rtable is embedded in struct net_bridge and is attached to bridged packets with skb_dst_set_noref(). If such a packet is queued to NFQUEUE, __nf_queue() upgrades that fake dst with skb_dst_force(). At that point the queued skb can hold a real dst reference after bridge teardown has started. The problem is not that every bridged packet needs its own dst reference. The problem is that NFQUEUE can keep the bridge private fake dst alive after unregister begins. Fix this by keeping the bridge fake dst model unchanged and pinning the bridge master device only while the packet sits in NFQUEUE. Record the bridge device in nf_queue_entry when the queued skb carries a bridge fake dst, take a device reference for the queue lifetime, and drop it when the queue entry is freed. Also make sure queued entries are reaped when that bridge device goes down, and drop the redundant nf_bridge_info_exists() test from the fake dst detection. This keeps netdev_priv(br->dev) alive until verdict completion, so the embedded fake rtable and its metrics backing storage cannot be freed out from under dst_release(). It also avoids the constant refcount bump and avoids using ipv4-specific dst helpers for IPv6 bridge traffic.",
    "evidence": "osv:CVE-2026-72255",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "5.10.270",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "5.15.217",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.1.178",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.6.145",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.12.97",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.40",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "7.1.5",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-72255",
      "aliases": [
        "CVE-2026-72255"
      ],
      "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": "34666d467cbf1e2e3c7bb15a63eccfb582cdd71f"
                },
                {
                  "fixed": "4e56d3d60d3192ef0a0c08e8b433636690189384"
                },
                {
                  "fixed": "8dc51351472825500145eed5bddfb88b2ec32008"
                },
                {
                  "fixed": "430521af7fe8a9c08f5a2554224a35f11f51d99e"
                },
                {
                  "fixed": "3f03a2d225c668283110ad5f9ff159ba4591e2c7"
                },
                {
                  "fixed": "01ace27af47801dd7f6b839e782b62863af979cc"
                },
                {
                  "fixed": "0ca505346c5e2905ab7b5313af801fcf38f594a8"
                },
                {
                  "fixed": "47b3af24de5fbed4bf2952de0f5294ef1a338a26"
                },
                {
                  "fixed": "c9c9b37f8c5505224e8d206184df3bb668ee00cf"
                }
              ]
            }
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-72255.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "3.18.0"
                },
                {
                  "fixed": "5.10.270"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.11.0"
                },
                {
                  "fixed": "5.15.217"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.16.0"
                },
                {
                  "fixed": "6.1.178"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.2.0"
                },
                {
                  "fixed": "6.6.145"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.7.0"
                },
                {
                  "fixed": "6.12.97"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.18.40"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.19.0"
                },
                {
                  "fixed": "7.1.5"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-72255.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:46.092776960Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/01ace27af47801dd7f6b839e782b62863af979cc",
        "https://git.kernel.org/stable/c/0ca505346c5e2905ab7b5313af801fcf38f594a8",
        "https://git.kernel.org/stable/c/3f03a2d225c668283110ad5f9ff159ba4591e2c7",
        "https://git.kernel.org/stable/c/430521af7fe8a9c08f5a2554224a35f11f51d99e",
        "https://git.kernel.org/stable/c/47b3af24de5fbed4bf2952de0f5294ef1a338a26",
        "https://git.kernel.org/stable/c/4e56d3d60d3192ef0a0c08e8b433636690189384",
        "https://git.kernel.org/stable/c/8dc51351472825500145eed5bddfb88b2ec32008",
        "https://git.kernel.org/stable/c/c9c9b37f8c5505224e8d206184df3bb668ee00cf",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72255.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-72255",
        "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/72xxx/CVE-2026-72255.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-72255",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 514336,
  "published_at": "2026-08-15T05:54:42.972+00:00"
}