---
id: CVE-2026-46015
title: |-
  In the Linux kernel, the following vulnerability has been resolved:

  tcp: call sk_data_ready() after listener migration

  When inet_csk_listen_stop() migrates an established child socket from
  a closing listener to another socket in the sa…
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  tcp: call sk_data_ready() after listener migration

  When inet_csk_listen_stop() migrates an established child socket from
  a closing listener to another socket in the sa…
severity: high
cvss: 7.8
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'
vendor: linux
product: linux_kernel
affected:
  - 'linux_kernel >= 5.14, < 5.15.209'
  - 'linux_kernel >= 5.16, < 6.1.175'
  - 'linux_kernel >= 6.2, < 6.6.140'
  - 'linux_kernel >= 6.7, < 6.12.86'
  - 'linux_kernel >= 6.13, < 6.18.27'
  - 'linux_kernel >= 6.19, < 7.0.4'
patched:
  - linux_kernel 7.0.4
published: '2026-05-27'
updated: '2026-09-08'
sourceUpdated: '2026-09-08T09:18:06.277'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-46015'
references:
  - url: 'https://git.kernel.org/stable/c/12625b4da84caf4d84a04988710a7b9bcf702b18'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/14e9bb6eba8f59dcc637702e4744ae5e30660d76'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/3864c6ba1e041bc75342353a70fa2a2c6f909923'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/7aa7933a5607b1e5b56f322d17265c1d0ea02c51'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/83bb57635d7cbafde32f865b577ecfd969f02337'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/ab5fdcd535645f6dbe6e9e21d96a08d141e88b4b'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://git.kernel.org/stable/c/bebd058ef40c67a81fe6d9ee8beaa4ede90e0704'
    label: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
  - url: 'https://cert-portal.siemens.com/productcert/html/ssa-019113.html'
    label: 0b142b55-0307-4c5a-b3c9-f314f3fb7c5e
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-46015.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-46015'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2481936'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-46015'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-46015'
  - url: >-
      https://lore.kernel.org/linux-cve-announce/2026052745-CVE-2026-46015-796a@gregkh/T
  - url: 'https://access.redhat.com/errata/RHSA-2026:64775'
  - url: 'https://access.redhat.com/errata/RHSA-2026:66180'
tags:
  - nvd
  - cve.org
  - csaf
  - vex
  - red-hat
epss: 0.00129
epssPercentile: 0.02938
ingestedAt: '2026-09-08T13:33:24.193Z'
cwe:
  - CWE-821
scores:
  nvd: 7.8
  vendor: 7
---

## Overview

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

tcp: call sk_data_ready() after listener migration

When inet_csk_listen_stop() migrates an established child socket from
a closing listener to another socket in the same SO_REUSEPORT group,
the target listener gets a new accept-queue entry via
inet_csk_reqsk_queue_add(), but that path never notifies the target
listener's waiters. A nonblocking accept() still works because it
checks the queue directly, but poll()/epoll_wait() waiters and
blocking accept() callers can also remain asleep indefinitely.

Call READ_ONCE(nsk->sk_data_ready)(nsk) after a successful migration
in inet_csk_listen_stop().

However, after inet_csk_reqsk_queue_add() succeeds, the ref acquired
in reuseport_migrate_sock() is effectively transferred to
nreq->rsk_listener. Another CPU can then dequeue nreq via accept()
or listener shutdown, hit reqsk_put(), and drop that listener ref.
Since listeners are SOCK_RCU_FREE, wrap the post-queue_add()
dereferences of nsk in rcu_read_lock()/rcu_read_unlock(), which also
covers the existing sock_net(nsk) access in that path.

The reqsk_timer_handler() path does not need the same changes for two
reasons: half-open requests become readable only after the final ACK,
where tcp_child_process() already wakes the listener; and once nreq is
visible via inet_ehash_insert(), the success path no longer touches
nsk directly.

## Affected

- `linux_kernel >= 5.14, < 5.15.209`
- `linux_kernel >= 5.16, < 6.1.175`
- `linux_kernel >= 6.2, < 6.6.140`
- `linux_kernel >= 6.7, < 6.12.86`
- `linux_kernel >= 6.13, < 6.18.27`
- `linux_kernel >= 6.19, < 7.0.4`

## Remediation

Upgrade past the affected range:

- `linux_kernel 7.0.4`

## Vendor advisories

- **RHSA-2026:64775** · Red Hat · fixed in: Red Hat Enterprise Linux AppStream (v. 10), Red Hat Enterprise Linux BaseOS (v. 10), Red Hat Enterprise Linux CodeReady Linux Builder (v. 10), Red Hat Enterprise Linux Real Time for NFV (v. 10), Red Hat Enterprise Linux Real Time (v. 10) · released 2026-09-08 · [advisory](https://access.redhat.com/errata/RHSA-2026:64775)
- **Red Hat VEX** · Moderate · affected: Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 9 · no fix planned: Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 9 · updated 2026-09-10 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-46015.json)
- **RHSA-2026:66180** · Red Hat · fixed in: Red Hat Enterprise Linux AppStream (v. 9), Red Hat Enterprise Linux BaseOS (v. 9), Red Hat Enterprise Linux CodeReady Linux Builder (v. 9), Red Hat Enterprise Linux Real Time for NFV (v. 9), Red Hat Enterprise Linux Real Time (v. 9) · released 2026-09-10 · [advisory](https://access.redhat.com/errata/RHSA-2026:66180)
