Overview
CVE-2026-43074High

An epoll object could be freed while another thread was still using it

Android / Linux kernel · eventpoll · Published Jul 15, 2026

ep_free · ep_get_upwards_depth_proc

AffectsLinux 6.4 and affected stable branches before their fixesPixel 10 Pro · Android 17 build CP2A.260705.006 demo target

Artifactsexploit.mdpatch.diff

Summary

Linux epoll keeps links between watched files and an eventpoll object. In this bug, one of those links could remain visible to a concurrent RCU reader after the associated eventpoll reached its final reference.

The cleanup path freed the object immediately. A thread performing the epoll loop-depth check could therefore continue through the old link and access memory that no longer belonged to the eventpoll object.

Why it mattered

An ordinary local process can create nested epoll descriptors, close them, and repeatedly drive the race from its own threads. A successful race turns a normal lifetime mismatch into kernel memory corruption.

CyberMeowfia validates the issue as a local privilege escalation on a Pixel 10 Pro running the July 2026 Android 17 build. The repository reports a success rate above 80% on that exact target.

The issue has been fixed. The affected-build description here does not imply that a Pixel or Linux system carrying its vendor’s current security updates remains vulnerable.

What went wrong

ep_free() could call kfree() for a struct eventpoll while an epitem referring to it was still visible under RCU. At the same time, ep_get_upwards_depth_proc() could obtain the freed object from that epitem and read or update its fields.

The missing RCU grace period was the key lifetime error: removing the final normal reference was not enough to prove that every lockless reader had finished.

Exploit

Because the vulnerability and its fix are public, the exploit orchestrator is included here for reproducibility. The preview starts at main() and shows exactly 15 lines. Expanding it reveals the complete selected C file embedded in this page; the remaining C files, assembly, headers, and build instructions stay in the linked CyberMeowfia directory.

Public exploit · patched target
CyberMeowfia snapshot4c1f0aa
Browse all files
Exploit orchestrator and entry point · 236 linesOpen at main() ↗
src/main.c
int main(int argc, char **argv)
{
const size_t carrier_size = blob_size(dumpstate_payload_start,
dumpstate_payload_end);
struct utsname uts;
struct stat challenge_stat;
struct stat socket_stat;
struct stat su_stat;
struct timespec now;
char fingerprint[PROP_VALUE_MAX] = {0};
char challenge_token[64];
char command[1024];
char warm;
char *challenge;
char *initial_context;

The selected file is the execution entry point. Build files, headers, leak helpers, and supporting sources remain in the linked CyberMeowfia directory.

Patch

The upstream fix defers freeing the eventpoll object until an RCU grace period has elapsed. That guarantees that readers which already reached the object through an epitem finish before its memory can be reused.

Install an Android or Linux kernel update containing the applicable stable backport. Version numbers alone are not a reliable test because vendors commonly backport security fixes without adopting the newest upstream kernel.

Find bugs in your code.

Before anyone else does.