Skip to content
Heist/ feed
Back to feed
HighFix available

net: ipv6: flowlabel: defer exclusive option free until RCU teardown

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: net: ipv6: flowlabel: defer exclusive option free until RCU teardown `ip6fl_seq_show()` walks the global flowlabel hash under the seq-file RCU read-side lock and prints `fl->opt->opt_nflen` when an option block is present. Exclusive flowlabels currently free `fl->opt` as soon as `fl->users` drops to zero in `fl_release()`. However, the surrounding `struct ip6_flowlabel` remains visible in the global hash table until later garbage collection removes it and `fl_free_rcu()` finally tears it down. A concurrent `/proc/net/ip6_flowlabel` reader can therefore race that early `kfree()` and dereference freed option state, triggering a crash in `ip6fl_seq_show()`. Fix this by keeping `fl->opt` alive until `fl_free_rcu()`. That matches the lifetime already required for the enclosing flowlabel while readers can still reach it under RCU.

Products
Kernel
Affected versions
Not specified
Fixed versions
5.10.253, 5.15.203, 6.1.168, 6.12.81, 6.18.22, 6.19.12, 6.6.134
CVEs
CVE-2026-31680
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 17:06 UTC · Revision 1

Source evidence

net: ipv6: flowlabel: defer exclusive option free until RCU teardown

core-osv · Original source

Published 25 Apr 2026, 08:46 UTC

In the Linux kernel, the following vulnerability has been resolved: net: ipv6: flowlabel: defer exclusive option free until RCU teardown `ip6fl_seq_show()` walks the global flowlabel hash under the seq-file RCU read-side lock and prints `fl->opt->opt_nflen` when an option block is present. Exclusive flowlabels currently free `fl->opt` as soon as `fl->users` drops to zero in `fl_release()`. However, the surrounding `struct ip6_flowlabel` remains visible in the global hash table until later garbage collection removes it and `fl_free_rcu()` finally tears it down. A concurrent `/proc/net/ip6_flowlabel` reader can therefore race that early `kfree()` and dereference freed option state, triggering a crash in `ip6fl_seq_show()`. Fix this by keeping `fl->opt` alive until `fl_free_rcu()`. That matches the lifetime already required for the enclosing flowlabel while readers can still reach it under RCU.

osv:CVE-2026-31680

Kernel

Fixed versions: 5.10.253, 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22, 6.19.12

Complete source record
{
  "id": "c76f678fa8d75904f986dd8c8925586227ea1cfb61cb63c50479ad783b0e7f15",
  "url": "https://osv.dev/vulnerability/CVE-2026-31680",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "net: ipv6: flowlabel: defer exclusive option free until RCU teardown",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: net: ipv6: flowlabel: defer exclusive option free until RCU teardown `ip6fl_seq_show()` walks the global flowlabel hash under the seq-file RCU read-side lock and prints `fl->opt->opt_nflen` when an option block is present. Exclusive flowlabels currently free `fl->opt` as soon as `fl->users` drops to zero in `fl_release()`. However, the surrounding `struct ip6_flowlabel` remains visible in the global hash table until later garbage collection removes it and `fl_free_rcu()` finally tears it down. A concurrent `/proc/net/ip6_flowlabel` reader can therefore race that early `kfree()` and dereference freed option state, triggering a crash in `ip6fl_seq_show()`. Fix this by keeping `fl->opt` alive until `fl_free_rcu()`. That matches the lifetime already required for the enclosing flowlabel while readers can still reach it under RCU.",
    "evidence": "osv:CVE-2026-31680",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "5.10.253",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "5.15.203",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.1.168",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.6.134",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.12.81",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.22",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.19.12",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-31680",
      "aliases": [
        "CVE-2026-31680"
      ],
      "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": "d3aedd5ebd4b0b925b0bcda548066803e1318499"
                },
                {
                  "fixed": "4b6798024f7b2d535f3db1002c760143cdbd1bd3"
                },
                {
                  "fixed": "3c54b66c83fb8fcbde8e6a7bf90b65856e39f827"
                },
                {
                  "fixed": "5a6b15f861b7c1304949e3350d23490a5fe429fd"
                },
                {
                  "fixed": "6c7fbdb8ffde6413640de7cfbd7c976c353e89f8"
                },
                {
                  "fixed": "8027964931785cb73d520ac70a342a3dc16c249b"
                },
                {
                  "fixed": "414726b69921fe6355ae453f5b35e68dd078342a"
                },
                {
                  "fixed": "572ce62778519a7d4d1c15f55dd2e45a474133c4"
                },
                {
                  "fixed": "9ca562bb8e66978b53028fa32b1a190708e6a091"
                }
              ]
            }
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-31680.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "3.9.0"
                },
                {
                  "fixed": "5.10.253"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.11.0"
                },
                {
                  "fixed": "5.15.203"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.16.0"
                },
                {
                  "fixed": "6.1.168"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.2.0"
                },
                {
                  "fixed": "6.6.134"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.7.0"
                },
                {
                  "fixed": "6.12.81"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.18.22"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.19.0"
                },
                {
                  "fixed": "6.19.12"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-31680.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:30.502329640Z",
      "provider": "osv",
      "references": [
        "https://cert-portal.siemens.com/productcert/html/ssa-019113.html",
        "https://cert-portal.siemens.com/productcert/html/ssa-082556.html",
        "https://cert-portal.siemens.com/productcert/html/ssa-457936.html",
        "https://git.kernel.org/stable/c/3c54b66c83fb8fcbde8e6a7bf90b65856e39f827",
        "https://git.kernel.org/stable/c/414726b69921fe6355ae453f5b35e68dd078342a",
        "https://git.kernel.org/stable/c/4b6798024f7b2d535f3db1002c760143cdbd1bd3",
        "https://git.kernel.org/stable/c/572ce62778519a7d4d1c15f55dd2e45a474133c4",
        "https://git.kernel.org/stable/c/5a6b15f861b7c1304949e3350d23490a5fe429fd",
        "https://git.kernel.org/stable/c/6c7fbdb8ffde6413640de7cfbd7c976c353e89f8",
        "https://git.kernel.org/stable/c/8027964931785cb73d520ac70a342a3dc16c249b",
        "https://git.kernel.org/stable/c/9ca562bb8e66978b53028fa32b1a190708e6a091",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/31xxx/CVE-2026-31680.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-31680",
        "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/31xxx/CVE-2026-31680.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-31680",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 497697,
  "published_at": "2026-04-25T08:46:56.807+00:00"
}