ASELSANMicrokernel
GELİŞTİRME GÜNLÜĞÜ

M5 — Capability

M5 · M6 · M7 özet
Capability + IPC alt-birimleri — tek bakışta durum
Generic Capability, CNode, provenance, 5 object kind, EL0 IPC, M6+M7 audit 20/20
9 ✓ · 1 🟡 (M5.5)
✓ M5.1
Generic Capability + Store + mint/derive/revoke
✓ M5.2
Provenance meta (creation_tick, revoked_by, revoked_at)
✓ M5.3
CNode (16 slot + generation-based use-after-revoke)
✓ M5.4
5 kind: Endpoint · Memory · TCB · Untyped · Framebuffer
🟡 M5.5
Stack guard page (audit #18) — kalan tek M5 gap'i
✓ M6.1
Endpoint cap + badge filter + derive
✓ M6.3
Kernel-içi msg queue + Reply Cap
✓ M6.4
EL0 ↔ EL0 end-to-end IPC (10/10 audit)
✓ M7.1–M7.5
IPC ABI + rights + reply cap lifecycle (10/10 audit)
🔴 Silent bug + 7 düzeltme
USER_ACCESSIBLE yanlış AP bit (kritik)
Eski 1 << 7 aslında AP[2] (read-only) idi — USER bit değil. M4.4 framebuffer mapping'leri sessizce RO çalışıyordu, kernel-side write'larıyla maskelenmişti. M6.4 USER_NORMAL ile kernel RAM'i remap deneyince kernel kendi .text'ini RO yapıp instruction abort fırtınası → bug fark edildi.
Fix: 1 << 6 (doğru AP[1] pozisyonu).
M5 "Task not found" log spam
Smoke test sahte ID 100/200 → her mint 3 satır spam. Beklenen durum sessize alındı.
CapabilityKind: Memory/Tcb/Untyped
Tipler enum'a eklendi (impl M5.4/5.5'te).
M5.2 + M5.4 + M4.5
Provenance · Generic Cap kinds · EL0 IRQ preempt
Audit'in 3 küçük/orta TODO'su — tek seans'ta temizlendi.
3 KARE YEŞİL
M5.2 · Provenance meta
  • CapabilityEntry'ye creation_tick, revoked_by, revoked_at_tick
  • new_minted() global TICKS'tan tarih okur
  • CAP-REVOKE log'u life={t} + revoker basıyor — forensics OK
M5.4 · Generic Cap kinds
  • mint_memory(owner, phys, sz)
  • mint_tcb(owner, target_task)
  • mint_untyped(owner, phys, sz_log2)
  • Display: MEM · TCB · UNTY; revoke() arm her üç kind için
M4.5 · EL0 IRQ preempt
  • el0_aarch64_irq vector entry artık rust_irq_handler'a yönlendi (eskiden invalid_entry → panic)
  • Test task user_busy_loop: kooperatif yield yok, sadece nop
  • Timer slice (2t) bitince EL0'dan trap → scheduler context_switch → diğer task'ler koşuyor
QEMU çıktısı (M4.5 — kanıt)
[M5.4] Memory  cap mint: id=5 owner=100 phys=0x41000000 size=4096 [M5.4] TCB     cap mint: id=6 owner=100 target=task#42 [M5.4] Untyped cap mint: id=7 owner=100 phys=0x45000000 size=2^16 bytes [CAP-REVOKE] cap#5 owner=100 kind=Memory parent=None life=0t revoker=Some(100)   ← M5.2 forensics [Scheduler] Task #6 'M4.5-Busy' (slice=2, user=true) spawn edildi [M4.3-DEBUG] context_switch: old → M4.5-Busy (next_is_user=true) [M4.5-Busy] iter (pure EL0)                                                       ← EL0'da koşuyor [M4.5-Busy] iter (pure EL0) [M4.3-DEBUG] context_switch: old → IPC-Server   (next_is_user=true)               ← IRQ preempt fired [M4.3-DEBUG] context_switch: old → User-Yield   (next_is_user=true) [M4.3-DEBUG] context_switch: old → Kern-A       (next_is_user=false) [M4.3-DEBUG] context_switch: old → M4.5-Busy    (next_is_user=true)               ← round-robin geri döndü [M4.5-Busy] iter (pure EL0) [M4.3-DEBUG] task_exit() name='M4.5-Busy' id=6 is_user=true state=Dead            ← temiz exit
Niye önemli
EL0 artık güvenli
Hostile/buggy bir user task CPU'yu monopol edemez — timer her tick'te scheduler'a kontrol veriyor. seL4-tarzı sert preempt sağlandı.
Cap genelleşti
Framebuffer + Endpoint dışındaki 3 kind (Memory, TCB, Untyped) ilk class artık. M5.3 derive/revoke iskeleti zaten hazır.
Audit trail
creation_tick + revoked_at_tick ile her cap'in ömrü ölçülebilir — forensics + resource accounting altyapısı.