Bosh sahifa Wiki Heap Corruption

Heap Corruption

Heap Corruptionheap allocator metadata’si yoki ajratilgan obyektlar chegarasi noqonuniy write, double free, use-after-free yoki boshqa memory xatosi sabab buzilgan holat.

Allocator metadata

Out-of-bounds write qo‘shni allocation header yoki user data’ni o‘zgartiradi. Xato allocator keyingi malloc/free qilganda ko‘rinishi mumkin, shuning uchun crash joyi asl sabab emas.

Double free

Double free free-listga bitta chunkni ikki marta kiritadi. Modern allocator state, quarantine va integrity check bilan aniqlaydi. Exploitlar metadata write orqali arbitrary addressga ta’sir qilishga uringan.

Use-after-free

Use-after-free yangi allocation obyektini buzishi mumkin. Race allocator va owner lifecycle’ini aralashtiradi. Memory-safe til yoki ownership modeli xato sinfini sezilarli kamaytiradi.

Himoya usullari

Guard page katta allocation boundaryni, redzone va shadow memory kichik overflow’ni topadi. Hardened allocator cookie, safe-linking va randomized layout ishlatishi mumkin.

Crash tahlili

Production crashdan oldingi heap shunchalik buzilgan bo‘lishi mumkinki to‘liq dumpning o‘zi xavfli. Minimal allocator diagnostic, recent allocation trace va sanitizer reproducer foydali.

Test

Test fuzzing, allocation failure, double free, cross-thread ownership va boundary write bilan sanitizer/hardened allocator ostida bajariladi.

Amaliy nazorat

Heap Corruption bilan ishlaydigan tizim chunk state, free list va ownershipni aniq lifecycle va version bilan yuritadi. Pointer, mapping, navbat yoki exception holati boshqa qatlamga uzatilganda ownership hamda permission shartlari yo‘qolmaydi. Debug rejimda manzil, obyekt identifikatori va state transition qayd etiladi; production log ASLR, maxfiy ma’lumot va raw pointerlarni ochib yubormaydigan shaklga keltiriladi. Eskirgan handle yoki metadata reuse qilinmasligi uchun generation, build-id yoxud reference hisobidan foydalaniladi.

Muhim xavf — overflow, double free yoki cross-thread misuse. Bunday vaziyatda tizim taxmin bilan davom etmaydi: access fault, aniq error, konservativ fallback yoki nazoratli cleanup qo‘llanadi. Signal/fault kelgan nuqta har doim asl buzilish joyi emas; allocation, mapping va oxirgi ownership amallari trace’i tashxisga yordam beradi. Parallel accessda lock, atomic ordering va lifetime birgalikda tekshiriladi. Timeout yoki null check memory safetyning o‘rnini bosa olmaydi.

Sifat nazorati hardened allocator va fuzzing orqali bajariladi. Sinovlar normal holat bilan birga nol uzunlik, page boundary, alignment, juda katta offset, concurrent close/free, permission o‘zgarishi va platforma farqlarini qamraydi. Correctness avval etalon hamda invariant bilan tekshiriladi, keyin page fault, cache miss, contention, latency yoki xotira sarfi o‘lchanadi. Sanitizer, fault injection va malformed-input fuzzing topgan minimal holat doimiy regressiya testiga aylantiriladi.

Heap corruption ko‘pincha allocator tekshiruvi paytida aniqlanadi, lekin asl yozuv oldinroq sodir bo‘lgan bo‘ladi. Chunk header, free-list linki yoki qo‘shni obyekt chegarasi buzilsa keyingi allocation yoki free crash qiladi. Double free bir blokni ro‘yxatga ikki marta kiritishi, buffer overflow esa metadata’ni bosib ketishi mumkin. Reproduksiya uchun allocator tracing, guard pages, canary va sanitizer bir-birini to‘ldiradi. Crash manziliga yopishib qolmasdan, buzilgan blokning allocation stacki, birinchi free’i va barcha yozuvchilarini aniqlash muhim. Parallel holatda data race ham allocator simptomini keltirishi mumkin.

Bog‘liq tushunchalar

heap allocator, buffer overflow, double free, use-after-free, memory corruption, AddressSanitizer