You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Full ioctl-level testing reveals that ashmem on modern Android kernels is a **zombie** — only the bare minimum allocation path survives:
82
+
83
+
### Alive
84
+
| Feature | Status |
85
+
|---------|:---:|
86
+
| SET_SIZE (allocation) | ✅ |
87
+
| mmap (R/W + R/O + SEGV guard) | ✅ |
88
+
| 10 concurrent fds | ✅ |
89
+
| 32MB large allocation | ✅ |
90
+
91
+
### Dead
92
+
| Feature | Status |
93
+
|---------|:---:|
94
+
| SET\_NAME / GET\_NAME | 💀 ENOTTY |
95
+
| GET\_SIZE | 💀 ENOTTY |
96
+
| SET\_PROT\_MASK / GET\_PROT\_MASK | 💀 ENOTTY |
97
+
| PIN / UNPIN | 💀 EINVAL |
98
+
| GET\_PIN\_STATUS | 💀 ENOTTY |
99
+
| PURGE\_ALL\_CACHES | 💀 ENOTTY |
100
+
101
+
### Bottom line
102
+
103
+
ashmem can allocate and map memory, but **every management function is dead**. You can't name a region, can't query its size, can't pin pages, can't purge caches, can't set protection masks. The kernel has deliberately gutted all advanced features, leaving only the minimal allocation path for legacy app compatibility.
104
+
105
+
memfd provides all of this — naming (`/proc/self/fd/N`), sizing (`fstat`), sealing (`F_SEAL_WRITE`), and more — with a single syscall and no device dependency.
0 commit comments