---
id: CVE-2026-99139
title: 'tcp: fix use-after-free in do_tcp_getsockopt(TCP_CONGESTION)'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  tcp: fix use-after-free in do_tcp_getsockopt(TCP_CONGESTION)

  do_tcp_getsockopt() reads icsk->icsk_ca_ops->name without holding
  rcu_read_lock(). Since commit 0baf26b0fc…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 0baf26b0fcd74bbfcef53c5d5e8bad2b99c8d0d2 <
    c1804ef016392dd91267d2207ee43b1de34302ca
  - >-
    Linux >= 0baf26b0fcd74bbfcef53c5d5e8bad2b99c8d0d2 <
    a8e45471afa230c1431c26c8e99ec24377e3b514
  - >-
    Linux >= 0baf26b0fcd74bbfcef53c5d5e8bad2b99c8d0d2 <
    5271b79b7ad68dcb222e893773f92bdabf7750f3
  - Linux 5.6
published: '2026-10-28'
updated: '2026-10-28'
sourceUpdated: '2026-10-28T10:34:50.674Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-99139'
references:
  - url: 'https://git.kernel.org/stable/c/c1804ef016392dd91267d2207ee43b1de34302ca'
  - url: 'https://git.kernel.org/stable/c/a8e45471afa230c1431c26c8e99ec24377e3b514'
  - url: 'https://git.kernel.org/stable/c/5271b79b7ad68dcb222e893773f92bdabf7750f3'
tags:
  - cve.org
ingestedAt: '2026-10-28T11:09:40.429Z'
---

## Overview

In the Linux kernel, the following vulnerability has been resolved:

tcp: fix use-after-free in do_tcp_getsockopt(TCP_CONGESTION)

do_tcp_getsockopt() reads icsk->icsk_ca_ops->name without holding
rcu_read_lock(). Since commit 0baf26b0fcd7 ("bpf: tcp: Support
tcp_congestion_ops in bpf"), icsk_ca_ops can point to dynamically
allocated BPF struct_ops memory that may be freed concurrently via
setsockopt(TCP_CONGESTION), leading to a use-after-free.

  BUG: KASAN: slab-use-after-free in _copy_to_user+0x37/0x60
  Read of size 16 at addr ffff888013505260 by task exploit/149
   _copy_to_user+0x37/0x60
   do_tcp_getsockopt+0x158a/0x2460 (net/ipv4/tcp.c:4585)
   tcp_getsockopt+0x91/0xf0
   __sys_getsockopt+0xf7/0x170

Fix this by holding rcu_read_lock() around the ca_ops->name access,
using READ_ONCE() to load icsk_ca_ops, and copying the name to a
stack buffer before releasing the lock. Also annotate the relevant
icsk_ca_ops stores with WRITE_ONCE() to fix the accompanying KCSAN
data-race issue.

## Affected

- `Linux >= 0baf26b0fcd74bbfcef53c5d5e8bad2b99c8d0d2 < c1804ef016392dd91267d2207ee43b1de34302ca`
- `Linux >= 0baf26b0fcd74bbfcef53c5d5e8bad2b99c8d0d2 < a8e45471afa230c1431c26c8e99ec24377e3b514`
- `Linux >= 0baf26b0fcd74bbfcef53c5d5e8bad2b99c8d0d2 < 5271b79b7ad68dcb222e893773f92bdabf7750f3`
- `Linux 5.6`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
