Compositor anti-panic face à 4 cas malformés exercés en succession : brutal exit sans destroy, ack_configure avec mauvais serial, create_buffer avec dimensions nulles, create_buffer avec stride incohérent. Aucun crash, aucun blocage, ticks compositor continus 30s+ après la fin du fuzz. Frontend hardening : - BufferData.valid: bool, mis à false dans wl_shm_pool.create_buffer si dimensions/stride/offset incohérents avec la taille du pool. Le wl_buffer est quand même créé (contrat wayland-server) mais ignoré au commit. - ShmPool::read_argb signature passée de Vec<u32> à Option<Vec<u32>>. Refuse de lire si w/h/stride invalides ou si l'accès final dépasse self.size. Calculs en checked_add/checked_mul pour éviter tout overflow sur des params adversariaux. Évite tout accès UB. - xdg_surface.ack_configure refuse les serials > last_sent (log + ignore, pas de post_error pour 7.5 — tolérance volontaire). - wl_surface.commit court-circuite la lecture pour les buffers invalides ou si read_argb retourne None (log warning, surface garde son ancien contenu). Nouveau crate : redox-wl-test-fuzz-protocol (~370 lignes) - fork() pour chaque cas afin qu'un crash potentiel d'un cas ne contamine pas les suivants - 4 cas : brutal exit, bad ack serial, null dimensions, bad stride - Le parent attend chaque enfant via waitpid avant le suivant Validation runtime QEMU : - [fuzz1..4] tous PASS, [fuzz] PASS final - [frontend] xdg_surface.ack_configure: serial 99999 > last_sent 2, ignoring - [frontend] wl_shm_pool.create_buffer rejected: offset=0 width=0 height=0 stride=0 - [frontend] wl_shm_pool.create_buffer rejected: offset=0 width=100 height=10 stride=10 - Compositor continue à ticker 30+ s post-fuzz, curseur actif, surfaces des fuzz suivants créées et focusées normalement. Sub-bug documenté (à corriger 7.6) : la surface du fuzz1 (exit brutal sans destroy) persiste après la déconnexion du client. wayland-server détecte le close socket mais ne réveille pas automatiquement le wl_surface.Destroy handler. À hooker dans DumbClientData::disconnected pour le cleanup explicite. Doc complète : docs/phase7-5-robustness.md. Leyoda 2026 – GPLv3
973 B
1280x800px
973 B
1280x800px