7.8
/ 10
HIGH
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Description
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.
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.
Basic Information
ID
CVE-2026-31680
Source
Linux
Published
Apr 25, 2026 at 08:46
Modified
Apr 27, 2026 at 14:05
Affected Product
Vendor
Linux
Product
Linux
Version
d3aedd5ebd4b0b925b0bcda548066803e1318499
Affected Versions
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux 3.9
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux d3aedd5ebd4b0b925b0bcda548066803e1318499
Linux Linux 3.9
References
- git.kernel.org /stable/c/4b6798024f7b2d535f3db1002c760143cdbd1bd3
- git.kernel.org /stable/c/3c54b66c83fb8fcbde8e6a7bf90b65856e39f827
- git.kernel.org /stable/c/5a6b15f861b7c1304949e3350d23490a5fe429fd
- git.kernel.org /stable/c/6c7fbdb8ffde6413640de7cfbd7c976c353e89f8
- git.kernel.org /stable/c/8027964931785cb73d520ac70a342a3dc16c249b
- git.kernel.org /stable/c/414726b69921fe6355ae453f5b35e68dd078342a
- git.kernel.org /stable/c/572ce62778519a7d4d1c15f55dd2e45a474133c4
- git.kernel.org /stable/c/9ca562bb8e66978b53028fa32b1a190708e6a091