unlink
Код
Графічне пояснення
Перегляньте це чудове графічне пояснення процесу unlink:
Перевірки безпеки
Перевірте, чи вказаний розмір шматка такий же, як prev_size, вказаний у наступному шматку
Також перевірте, що
P->fd->bk == P
іP->bk->fw == P
Якщо шматок не малий, перевірте, що
P->fd_nextsize->bk_nextsize == P
іP->bk_nextsize->fd_nextsize == P
Витоки
Непов'язаний шматок не очищає виділені адреси, тому, маючи доступ до них, можна витікати деякі цікаві адреси:
Витоки Libc:
Якщо P знаходиться на початку двозв'язного списку,
bk
буде вказувати наmalloc_state
у libcЯкщо P знаходиться в кінці двозв'язного списку,
fd
буде вказувати наmalloc_state
у libcКоли двозв'язний список містить лише один вільний шматок, P знаходиться в двозв'язному списку, і обидва
fd
іbk
можуть витікати адресу всерединіmalloc_state
.
Витоки купи:
Якщо P знаходиться на початку двозв'язного списку,
fd
буде вказувати на доступний шматок у купіЯкщо P знаходиться в кінці двозв'язного списку,
bk
буде вказувати на доступний шматок у купіЯкщо P знаходиться в двозв'язному списку, обидва
fd
іbk
будуть вказувати на доступний шматок у купі
Last updated