iOS Kernel Heap Armageddon
iOS Kernel Heap Armageddon
iOS Kernel Heap Armageddon
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
_MALLOC() in <strong>iOS</strong> 4.x<br />
void *_MALLOC(size_t size, int type, int flags)<br />
{<br />
struct _mhead *hdr;<br />
size_t memsize = sizeof (*hdr) + size;<br />
}<br />
if (type >= M_LAST)<br />
panic("_malloc TYPE");<br />
if (size == 0)<br />
return (NULL);<br />
if (flags & M_NOWAIT) {<br />
hdr = (void *)kalloc_noblock(memsize);<br />
} else {<br />
hdr = (void *)kalloc(memsize);<br />
...<br />
}<br />
...<br />
hdr->mlen = memsize;<br />
return (hdr->dat);<br />
refuses to allocate<br />
0 byte big blocks<br />
Stefan Esser • <strong>iOS</strong> <strong>Kernel</strong> <strong>Heap</strong> <strong>Armageddon</strong> • April 2012 •<br />
possible integer overflow<br />
with huge size values<br />
struct _mhead {<br />
size_t mlen;<br />
char dat[0];<br />
}<br />
21