Use-after-free in TCP RACK stack option handler
FreeBSD-SA-26:43.tcp · CVE-2026-49422
Our decision for FreeSense
FreeBSD corrected this on 2026-06-30, before the FreeBSD source pin of every FreeSense version.
- Advisory: corrected 2026-06-30
- FreeSense 1.0 pin: e004ff15f87e (2026-08-03)
- FreeSense 1.1 pin: a52c50b4b7c2 (2026-10-04)
- FreeSense 1.2 pin: a52c50b4b7c2 (2026-10-04)
By FreeSense version
| Version | Status | FreeBSD pin |
|---|---|---|
| FreeSense 1.01.0.7 · frozen, no further fixes | FixedFreeBSD pin of 2026-08-03 | 2026-08-03e004ff15 |
| FreeSense 1.11.1.9 | FixedFreeBSD pin of 2026-10-04 | 2026-10-04a52c50b4 |
| FreeSense 1.21.2.0-DEVELOPMENT | FixedFreeBSD pin of 2026-10-04 | 2026-10-04a52c50b4 |
Workaround
Systems that have not loaded the tcp_rack.ko kernel module are not affected. The module is not loaded by default. To check whether it is loaded, run: # kldstat -m tcp_rack
What FreeBSD says
The RACK setsockopt(2) handler drops the connection lock in order to copy option data from userspace, then reacquires the lock. After reacquiring, it verifies that the TCP stack had not been switched away, but did not reload its pointer to the stack's per-connection control block. If userspace switches stacks twice during this window, the check will succeed but the saved pointer will refer to freed memory.
Impact
The bug may be exploitable by an unprivileged local user to escalate privileges.
Excerpt from the FreeBSD advisory. Read the original for the full text and the fix.