GELİŞTİRME GÜNLÜĞÜ
M7 — User IPC
M7 audit · 10/10
IPC rights enforcement + reply_cap lifecycle
M7.5 hak kontrolü tamamlandı, reply cap leak'leri kapatıldı, ABI sözleşmesi güncellendi.
M7.1–M7.5 hardened
🔴 Silent bug (3)
- #1 CALL path'inde reply_cap retain yanlış id (
target_idvsreply_cap.id) — asla match etmiyordu → leak. REPLY zaten one-shot temizliyor, CALL'dan tamamen kaldırıldı. - #2
deliver_message_and_wakefalse dönerse mesaj kayboluyordu + Client sonsuz block. Şimdi pending queue'ya enqueue; hedef ep kayıpsaNoReceiver+ reply_cap cleanup. - #3 Audit'in işaretlediği rights-check sıralaması aslında doğruydu (M6 audit zaten düzeltmiş) — yorum netleştirildi, false positive.
🟡 Rights enforcement (3)
- #4a
SYS_IPC_RECV: artıkep.rights.can_recv()doğrulaması var. Eskiden sadeceSYS_IPC_CALLrights check yapıyordu — asimetri. - #4b
SYS_IPC_REPLY:is_reply_cap && can_reply()birlikte gerekli — REPLY hakkı revoke edilmiş cap çalışmaz. - #10 Revoke wake: error case'inde
saved_user_gprs[1..=7]sıfırlanıyor — user wrapper çöpr_label/r_data0okumasın.
🟢 Cleanup + API (4)
- #6
EndpointRightsaccessor'ları tamamlandı:can_grant(),can_reply(); raw bitwise erişim kaldırıldı. - #7
SYS_LIST_ENDPOINTSmagic6→MAX_ENDPOINT_LIST_RETURNconst. - #8 M7.1 register sözleşme string'i güncel:
x7=reply_cap(M6 audit sonrası), full IN/OUT layout. - #9 Receive-on-own yorumu netleştirildi (eski "M6 audit" referansı kafa karıştırıyordu).
QEMU kanıtı (M6.4 demo, M7 fix'leri ile)
[IPC-Server] recv loop basliyor ← RECV rights check PASS [IPC-Client] CALL gonderiliyor ← SEND rights check PASS [IPC-Server] mesaj alindi, echo+1 ile reply gonderiliyor ← REPLY: is_reply_cap && can_reply() PASS [IPC-Client] reply DOGRU (echo+1) - hedef ile esleshme PASS x3 [IPC-Client] 3 cagri tamam, exit task_exit() name='IPC-Server'/'IPC-Client' state=Dead ← temiz exit, leak yok
Niye bu önemli
Reply cap leak kapatıldı
Server crash veya REPLY atlatma senaryolarında reply_cap'ler sonsuza dek registry'de birikiyordu. Şimdi pending enqueue + NoReceiver path'i + REPLY one-shot tek doğru yol.
Rights asimetrisi giderildi
Eskiden
SYS_IPC_CALL rights check ediyordu ama RECV/REPLY etmiyordu — SEND-only task'lar RECV/REPLY yapabilirdi. Şu an üç syscall da kendi hakkını kontrol ediyor.Mesaj kaybı imkânsız
CALL hedefte bekleyen yoksa eskiden mesaj siliniyor, client sonsuz block oluyordu. Şimdi pending queue + Server eventually RECV ile alır.