16. Glibc malloc Consolidating Chunks
(prev_size)
size
prev
p
(a) prev_inuseのチェック
図4 結合
size = p->size
If not prev_inuse(p):
prevsize = p->prev_size
size += prevsize
p += -(long)(prevsize)
fd
bk
(not used)
(prev_size)
size 0
data
+
pads
p
17. Glibc malloc Consolidating Chunks
(prev_size)
size
(b) 再配置
図4 結合
size = p->size
If not prev_inuse(p):
prevsize = p->prev_size
size += prevsize
p += -(long)(prevsize)
p
fd
bk
(not used)
(prev_size)
size 0
data
+
pads
prev
p
p
18. Glibc malloc Consolidating Chunks
(prev_size)
size 1
p
(c) 結果
図4 結合
p
(prev_size)
size
fd
bk
(not used)
fd
bk
(not used)
(prev_size)
size 0
data
+
pads
prev
p
p
21. House of Einherjar Flaw / Flow
(prev_size)
size
data
(prev_size)
size
data
+
pads
1
well-sized
shared
(a) Overflow前
図5 House of Einherjarの原理
p0 (used)
p1 (used)