Poison, redzones and shadows: inside KASAN
KASAN est un vérificateur d'exécution du noyau Linux qui détecte les accès hors bornes et les use-after-free en combinant une instrumentation du compilateur et une mémoire d'ombre maintenue par le noyau. L'activation se fait à la compilation via CONFIG_KASAN et options (mode inline/outline, suivi de vmalloc/stack, support matériel/logiciel) et génère des appels __asan_* insérés par GCC/LLVM devant les accès mémoire. La shadow memory réserve typiquement un octet pour 8 octets réels et encode, par octet, si la granule est entièrement valide, partiellement valide (nombre d'octets valides) ou empoisonnée avec des tags pour redzones et libérations. À l'allocation le noyau désempoisonne les zones utiles et place des redzones après l'objet, et à la libération il repointe la mémoire via la mise en quarantaine et l'empoisonnement pour permettre la détection de use-after-free. Le choix entre instrumentation inline et outline influe sur la taille et le coût d'exécution, et des variantes basées sur tags matériels/logiciels ainsi que la couverture de vmalloc/global/stack permettent d'équilibrer précision et overhead.