---
id: CVE-2026-98646
title: 'tcp: Skip cond_resched() in inet_csk_listen_stop() under BPF context'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  tcp: Skip cond_resched() in inet_csk_listen_stop() under BPF context

  bpf_sock_destroy() runs from the tcp iterator, under rcu_read_lock(). If
  the sock is a listener th…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b <
    23da88d1597ee7fdda373e1530284b763710911f
  - >-
    Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b <
    5b52417c6196e05618a3b5d9753dbed9adef0166
  - >-
    Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b <
    55bbebf2829c3f47c5a48fc261740301d0f25f48
  - >-
    Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b <
    ee7246bccb9da66076dd8094daa48bdc761d6b76
  - >-
    Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b <
    eaab8cab451b9502ce224cd202550375b894a467
  - Linux 6.5
published: '2026-10-18'
updated: '2026-10-18'
sourceUpdated: '2026-10-18T15:20:17.490Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-98646'
references:
  - url: 'https://git.kernel.org/stable/c/23da88d1597ee7fdda373e1530284b763710911f'
  - url: 'https://git.kernel.org/stable/c/5b52417c6196e05618a3b5d9753dbed9adef0166'
  - url: 'https://git.kernel.org/stable/c/55bbebf2829c3f47c5a48fc261740301d0f25f48'
  - url: 'https://git.kernel.org/stable/c/ee7246bccb9da66076dd8094daa48bdc761d6b76'
  - url: 'https://git.kernel.org/stable/c/eaab8cab451b9502ce224cd202550375b894a467'
tags:
  - cve.org
ingestedAt: '2026-10-18T15:45:12.226Z'
---

## Overview

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

tcp: Skip cond_resched() in inet_csk_listen_stop() under BPF context

bpf_sock_destroy() runs from the tcp iterator, under rcu_read_lock(). If
the sock is a listener that still has children in its accept queue,
tcp_abort() ends up in inet_csk_listen_stop() and the cond_resched()
there trips the debug check:

BUG: sleeping function called from invalid context at net/ipv4/inet_connection_sock.c:1523
in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 628, name: test_progs
preempt_count: 0, expected: 0
RCU nest depth: 1, expected: 0
locks held by test_progs/628: 3, last CPU#3:
 #0: ffff8881158cee18 (&p->lock){+.+.}-{4:4}, at: bpf_seq_read+0x56/0x1210
 #1: ffff8881106bb858 (sk_lock-AF_INET6){+.+.}-{0:0}, at: bpf_iter_tcp_seq_show+0x32b/0x4b0
 #2: ffffffffb435af20 (rcu_read_lock){....}-{1:3}, at: bpf_iter_run_prog+0x46b/0xde0
CPU: 3 UID: 0 PID: 628 Comm: test_progs Tainted: G        W           7.2.0+ #65 PREEMPT
Tainted: [W]=WARN
Call Trace:
 <TASK>
 dump_stack_lvl+0xc1/0xf0
 dump_stack+0x10/0x20
 __might_resched+0x3d2/0x610
 inet_csk_listen_stop+0x7b/0xbf0
 tcp_abort+0x23b/0x3b0
 bpf_sock_destroy+0xfc/0x140
 bpf_prog_448133d24601754f_iter_tcp6_server+0x81/0x8a
 bpf_iter_run_prog+0x538/0xde0
 bpf_iter_tcp_seq_show+0x26b/0x4b0
 bpf_seq_read+0x424/0x1210
 vfs_read+0x197/0xe40
 ksys_read+0x119/0x240
 __x64_sys_read+0x72/0xc0
 x64_sys_call+0x647/0x27e0
 do_syscall_64+0xe5/0x610
 entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7fad39b28aca
RSP: 002b:00007ffc381c61c0 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 00007ffc381c6a88 RCX: 00007fad39b28aca
RDX: 0000000000000032 RSI: 00007ffc381c6250 RDI: 0000000000000014
RBP: 00007ffc381c61e0 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003
R13: 0000000000000000 R14: 000055f077c1bbb0 R15: 00007fad3a0f3000
 </TASK>

The commit that added the kfunc already guards lock_sock() in tcp_abort()
and udp_abort() with has_current_bpf_ctx(), but missed the listener path.
Do the same for the cond_resched(). The loop runs inside the iterator's
rcu_read_lock(), it must not reschedule or report a quiescent state there.

## Affected

- `Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b < 23da88d1597ee7fdda373e1530284b763710911f`
- `Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b < 5b52417c6196e05618a3b5d9753dbed9adef0166`
- `Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b < 55bbebf2829c3f47c5a48fc261740301d0f25f48`
- `Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b < ee7246bccb9da66076dd8094daa48bdc761d6b76`
- `Linux >= 4ddbcb886268af8d12a23e6640b39d1d9c652b1b < eaab8cab451b9502ce224cd202550375b894a467`
- `Linux 6.5`

## Remediation

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