Bosh sahifa Wiki Memory Protection

Memory Protection

Memory Protectionmemory regionlariga read, write va execute kabi ruxsatlarni qo‘llab, noto‘g‘ri yoki ruxsatsiz accessni fault bilan to‘xtatadigan hardware va operatsion tizim mexanizmlari.

MMU nazorati

Page table entry user/supervisor, writable, executable va boshqa flagsni saqlaydi. MMU har accessda privilege hamda operation turini tekshiradi; buzilish page/protection fault hosil qiladi.

Permission siyosati

Code odatda read-execute, constants read-only, data read-write va stack non-executable bo‘ladi. W^X writable va executable holatni bir vaqtda cheklaydi. JIT write va execute bosqichlarini ajratadi.

Guard page

Guard page stack overflow yoki buffer boundaryni erta topadi. Heap allocator free qilingan katta regionni no-access qilib use-after-free diagnostikasini yaxshilashi mumkin.

Kengaytirilgan himoya

Protection key bir nechta region permissionini tez o‘zgartiradi. Capability yoki sandbox process ichidagi componentlarni ajratishi mumkin, ammo oddiy page granularity mayda obyektni alohida himoyalamaydi.

Side channel

Speculative execution architecturally rad etilgan accessdan microarchitectural side channel chiqarishi mumkin. KPTI va barrierlar threat modelga ko‘ra qo‘llanadi.

Fault testi

Test har permission kombinatsiyasi, user/kernel access, JIT transition, guard page va concurrent mprotectni qamraydi. Fault address hamda access turi tekshiriladi.

Amaliy nazorat

Memory Protection bilan ishlaydigan tizim page permission va privilege stateni 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 — writable-executable region yoki noto‘g‘ri user access. 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 read/write/execute fault matritsasi 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.

W^X siyosati bitta sahifaning bir vaqtning o‘zida ham writable, ham executable bo‘lishini cheklaydi. JIT kompilyator kodni yozish va bajarish bosqichlari orasida permissionni o‘zgartiradi yoki ikki xil viewdan foydalanadi; o‘tish sinxronlashtirilmasa boshqa thread eski instruktsiyalarni ko‘rishi mumkin. Guard page stack chegarasida yaroqsiz mapping sifatida qoldirilib, overflow erta aniqlanishiga xizmat qiladi. Himoya bitlari xavfsizlikning yagona qatlami emas: bounds check, privilege separation va control-flow himoyasi uni to‘ldiradi. Fault logidagi access turi — read, write yoki execute — noto‘g‘ri permissionni tez ajratishga yordam beradi.

Bog‘liq tushunchalar

MMU, page permission, NX bit, guard page, W^X, protection fault