tcache各版本变化
glibc-2.27
第一次出现tcache
可以随意double free
glibc-2.29
在每个free到tcache的chunk的bk位置加入tcache管理器的地址,用于doublefree检测。
——————————————————————————————————————————————————
unlink各版本变化
glibc-2.27及以前
将待unlink chunk称为p,它fd指针指向的chunk为FD,bk指针指向的为BK。
检测FD的bk是否为p,以及BK的fd是否为p,如果是则执行unlink。
源码:https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=ef04360b918bceca424482c6db03cc5ec90c3e00;hb=07c18a008c2ed8f5660adba2b778671db159a141#l1344
1 | FD = P->fd; |
glibc-2.31
添加了待p的size与相邻高地址chunk的prevsize是否相等的检查
源码更新log:https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=d6db68e66dff25d12c3bc5641b60cbd7fb6ab44f
1 | + if (__glibc_unlikely (chunksize(p) != prevsize)) |
——————————————————————————————————————————————————
doublefree各版本变化
glibc-2.29
在tcache的chunk的bk位置加入key,防止进入tcache的chunk double free。
unsorted bin大小范围
chunk 用户空间>=0x80 即至少malloc(0x80)
tcache大小范围
chunk 用户空间>= 0x420 即malloc(0x420)
另外calloc可以直接绕过tcache