{"api_version":"1","generated_at":"2026-11-06T18:31:10+00:00","cve":"CVE-2026-99270","urls":{"html":"https://cve.report/CVE-2026-99270","api":"https://cve.report/api/cve/CVE-2026-99270.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-99270","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-99270"},"summary":{"title":"tcp: Fix potential UAF in reqsk_timer_handler().","description":"In the Linux kernel, the following vulnerability has been resolved:\n\ntcp: Fix potential UAF in reqsk_timer_handler().\n\nWhen TCP socket migration fails at inet_ehash_insert() in\nreqsk_timer_handler(), we jump to the no_ownership: label\nand free the new reqsk immediately with __reqsk_free().\n\nThus, we must stop the new reqsk's timer before jumping to the\nlabel, but the timer might be missed since the cited commit,\nresulting in UAF.\n\nAs we are in the original reqsk's timer context, we can safely\ncall timer_delete_sync() for the new reqsk.\n\nLet's pass false to __inet_csk_reqsk_queue_drop() to stop\nthe new reqsk's timer.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-11-03 13:17:24","updated_at":"2026-11-06 18:18:33"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"8.1","severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.1,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"NONE","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"8.1","severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","data":{"baseScore":8.1,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","version":"3.1"}}],"references":[{"url":"https://git.kernel.org/stable/c/97c8a3c1f73d828de43a5a88e8a9a143efb2b661","name":"https://git.kernel.org/stable/c/97c8a3c1f73d828de43a5a88e8a9a143efb2b661","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/b3b56e95f6fad7fa7281450b443e861d82616fdb","name":"https://git.kernel.org/stable/c/b3b56e95f6fad7fa7281450b443e861d82616fdb","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-99270","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-99270","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af b3b56e95f6fad7fa7281450b443e861d82616fdb git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af 97c8a3c1f73d828de43a5a88e8a9a143efb2b661 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d3a1196bfc462943694623412d8e03aaf172bdc1 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 4.1.11 4.2 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 4.2","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 4.2 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.61 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["net/ipv4/inet_connection_sock.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"b3b56e95f6fad7fa7281450b443e861d82616fdb","status":"affected","version":"83fccfc3940c4a2db90fd7e7079f5b465cd8c6af","versionType":"git"},{"lessThan":"97c8a3c1f73d828de43a5a88e8a9a143efb2b661","status":"affected","version":"83fccfc3940c4a2db90fd7e7079f5b465cd8c6af","versionType":"git"},{"status":"affected","version":"d3a1196bfc462943694623412d8e03aaf172bdc1","versionType":"git"},{"lessThan":"4.2","status":"affected","version":"4.1.11","versionType":"semver"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["net/ipv4/inet_connection_sock.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"4.2"},{"lessThan":"4.2","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.61","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.1","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.61","versionStartIncluding":"4.2","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.1","versionStartIncluding":"4.2","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.1.11","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ntcp: Fix potential UAF in reqsk_timer_handler().\n\nWhen TCP socket migration fails at inet_ehash_insert() in\nreqsk_timer_handler(), we jump to the no_ownership: label\nand free the new reqsk immediately with __reqsk_free().\n\nThus, we must stop the new reqsk's timer before jumping to the\nlabel, but the timer might be missed since the cited commit,\nresulting in UAF.\n\nAs we are in the original reqsk's timer context, we can safely\ncall timer_delete_sync() for the new reqsk.\n\nLet's pass false to __inet_csk_reqsk_queue_drop() to stop\nthe new reqsk's timer."}],"metrics":[{"cvssV3_1":{"baseScore":8.1,"baseSeverity":"HIGH","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","version":"3.1"},"scenarios":[{"lang":"en","value":"AV:N - A TCP SYN handled by tcp_v4_rcv()/tcp_v6_rcv() → tcp_conn_request() → reqsk_queue_hash_req() allocates the request_sock and arms reqsk_timer_handler(); a later ACK on that 4-tuple is processed by tcp_check_req()/inet_ehash_nolisten() and makes inet_ehash_insert(nreq, oreq) fail. Those handshake segments are the attacker-controlled input and they arrive on routable TCP.\nAC:H - The buggy nreq path in reqsk_timer_handler() runs only when inet_sk_state_load(sk_listener)!=TCP_LISTEN and reuseport_migrate_sock() clones the req, which requires a non-default net.ipv4.tcp_migrate_req (default 0) or a BPF_SK_REUSEPORT_SELECT_OR_MIGRATE program plus close/shutdown of the listener. A remote peer cannot create that listener state on demand, even though the subsequent own_req race is attacker-driven.\nPR:N - The SYN is accepted in tcp_conn_request() while the socket is still TCP_NEW_SYN_RECV, before accept() and before any application credential check; reqsk_queue_hash_req() arms the timer with no uid, capability, or session requirement on the peer.\nUI:N - The attacker sends the SYN that creates oreq and the ACK that unhashes it so inet_ehash_insert() fails in reqsk_timer_handler(); no local user must mount, open, or confirm anything.\nS:U - The use-after-free is of the cloned nreq request_sock (rsk_timer, rsk_listener, rsk_ops) in the host kernel's request_sock slab; it does not cross a VM, IOMMU, or sandbox boundary.\nC:H - On inet_ehash_insert() failure, no_ownership calls __reqsk_free(nreq) while nreq->rsk_timer is still pending, so the next reqsk_timer_handler() reads rsk_listener and rsk_ops from freed memory. Further SYNs allocate from the same tcp_request_sock slab, giving a UAF read of attacker-shaped contents.\nI:H - The leftover nreq timer continues into reqsk_put/__reqsk_free on the already-freed object, decrementing a reused refcount and calling rsk_ops->destructor from sprayed request_sock memory, which is a UAF write and control-flow primitive.\nA:H - reqsk_timer_handler() running on the freed nreq dereferences a stale rsk_listener or double-frees the slab object in timer softirq, which oopses or panics the kernel for each migrated handshake whose ehash replace fails."}]}],"providerMetadata":{"dateUpdated":"2026-11-06T17:15:14.125Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/b3b56e95f6fad7fa7281450b443e861d82616fdb"},{"url":"https://git.kernel.org/stable/c/97c8a3c1f73d828de43a5a88e8a9a143efb2b661"}],"title":"tcp: Fix potential UAF in reqsk_timer_handler().","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-99270","datePublished":"2026-11-03T12:32:09.364Z","dateReserved":"2026-09-25T10:25:14.404Z","dateUpdated":"2026-11-06T17:15:14.125Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-11-03 13:17:24","lastModifiedDate":"2026-11-06 18:18:33","problem_types":[],"metrics":{"cvssMetricV31":[{"source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.1,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"NONE","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"},"exploitabilityScore":2.2,"impactScore":5.9}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"99270","Ordinal":"1","Title":"tcp: Fix potential UAF in reqsk_timer_handler().","CVE":"CVE-2026-99270","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"99270","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\ntcp: Fix potential UAF in reqsk_timer_handler().\n\nWhen TCP socket migration fails at inet_ehash_insert() in\nreqsk_timer_handler(), we jump to the no_ownership: label\nand free the new reqsk immediately with __reqsk_free().\n\nThus, we must stop the new reqsk's timer before jumping to the\nlabel, but the timer might be missed since the cited commit,\nresulting in UAF.\n\nAs we are in the original reqsk's timer context, we can safely\ncall timer_delete_sync() for the new reqsk.\n\nLet's pass false to __inet_csk_reqsk_queue_drop() to stop\nthe new reqsk's timer.","Type":"Description","Title":"tcp: Fix potential UAF in reqsk_timer_handler()."}]}}}