fou: Fix use-after-free in fou_create()
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.271, 5.15.222, 6.1.189, 6.6.158, 6.12.111, and 2 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: fou: Fix use-after-free in fou_create() fou_create() publishes struct fou through sk_user_data before adding the new FOU port to the per-netns list. If fou_add_to_port_list() fails, the error path frees fou while it is still reachable through sk_user_data. A concurrent receive can then dereference the freed object in fou_from_sock(). This ordering issue was previously noted in the linked discussion. The failure is reachable when local port 0 is requested. Each socket binds to a different ephemeral port, but fou_cfg_cmp() compares the requested port 0 and reports -EALREADY once an entry already exists. Release the tunnel socket before freeing fou so sk_user_data is cleared first, and defer reclamation with kfree_rcu() to protect concurrent RCU readers. This matches the lifetime handling in fou_release().
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in 0ee628a58d83e571f36ec9f07624d6845e420c50; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in a6fca682cfa2041e31aa72cc397c4a1406eb7468; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in b3f9c3e60aa25453774f899d25b5e61dd0bec1d5; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in 99f4d3120b244f92e5df787152041296a2860cb5; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in 58835985c035a8333742f829ad7e0889a082f9d3; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in 9042867d4701728f0c6527215b11471759904d8f; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in a28d8903bfe76089ea4bbdbff9976965f9ef8107; From 23461551c00628c3f3fe9cf837bf53cf8f212b63 · fixed in b14361aca6350ff7907b0e9903c7b94dc7d5d4a0
- Linux Linux
3.18
- KernelLinux
From 3.18.0 · fixed in 5.10.271; From 5.11.0 · fixed in 5.15.222; From 5.16.0 · fixed in 6.1.189; From 6.2.0 · fixed in 6.6.158; From 6.7.0 · fixed in 6.12.111; From 6.13.0 · fixed in 6.18.53; From 6.19.0 · fixed in 7.1.8
References 8
git.kernel.org
- stable/c/0ee628a58d83e571f36ec9f07624d6845e420c50
- stable/c/a6fca682cfa2041e31aa72cc397c4a1406eb7468
- stable/c/b3f9c3e60aa25453774f899d25b5e61dd0bec1d5
- stable/c/99f4d3120b244f92e5df787152041296a2860cb5
- stable/c/58835985c035a8333742f829ad7e0889a082f9d3
- stable/c/9042867d4701728f0c6527215b11471759904d8f
- stable/c/a28d8903bfe76089ea4bbdbff9976965f9ef8107
- stable/c/b14361aca6350ff7907b0e9903c7b94dc7d5d4a0