能力值:
( LV7,RANK:100 )
|
-
-
2 楼
从调试上看,ipv4 的 struct sock 在 ipv6 的slab 上错误释放,这导致 ipv4 slab 单链在后续会重复分配,也就是两个ipv4 sock会使用同一个 slab cache,所以这里应该会有一个 double free。struct sock 是专用的 kmem_cache ,常规的的 heap spray 的方法是 refiled 不上的,我尝试 physmap spray 也一直未成功,难道是姿势不对?从一些linux大牛那里得知,struct sock 这种专用 slab 所在的内存也是可能会被重新分配给常规 slab 使用的,场景如下,释放 sock 之后,如果该 slab 所有的 object 均为空闲,那这个 slab 是会回归 buddy 伙伴系统的,常规内存申请方式(kmalloc)申请 page 时是有可能从 buddy 伙伴系统那里拿到这片内存,还未验证。。。
|
能力值:
( LV7,RANK:100 )
|
-
-
3 楼
GeneBlue
从调试上看,ipv4 的 struct sock 在 ipv6 的slab 上错误释放,这导致 ipv4 slab 单链在后续会重复分配,也就是两个ipv4 sock会使用同一个 slab cache ...
这里怎么会重复分配,错误释放的这一次肯定是把出问题的这个socket给close了,然后引起了free操作,下一次,这块free得到的内存,还是正常被其他的socket拿去用了,为啥会存在两个ipv4 sock使用同一个slab cache?
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
wule
这里怎么会重复分配,错误释放的这一次肯定是把出问题的这个socket给close了,然后引起了free操作,下一次,这块free得到的内存,还是正常被其他的socket拿去用了,为啥会存在两个ipv4 ...
不是指这个victim object被重复分配,是指它的下一个 free object在分配时会被重复分配(之后这个slab所有free object都会会被重复分配),触发以后在持续性申请 ipv4 sock。 我从调试上看是这样的
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
GeneBlue
不是指这个victim object被重复分配,是指它的下一个 free object在分配时会被重复分配(之后这个slab所有free object都会会被重复分配),触发以后在持续性申请 ipv4 ...
我好像有点明白了,如果说可以构造出来这样的case,我顺着这里再瞅瞅,,,
|
|
|