Sécurité mémoire en Go : Le danger caché de l'insécurité des threads

2025-07-25

Cet article remet en question la compréhension commune de la sécurité mémoire en Go. L'auteur soutient que la simple sécurité mémoire (par exemple, éviter l'accès hors limites) n'est pas suffisante pour des programmes robustes ; la véritable sécurité réside dans l'évitement du comportement indéfini (UB). Un exemple de programme Go montre comment les courses de données peuvent conduire à UB et à des plantages, même sans utiliser d'opérations `unsafe`. L'auteur affirme que la gestion des courses de données en Go n'est pas assez stricte, contredisant ses affirmations de sécurité mémoire, rendant les programmes Go plus vulnérables aux exploits de sécurité. La conclusion souligne que la sécurité du langage n'est pas binaire, mais comprendre les garanties de sécurité d'un langage et les compromis est crucial.

Lire plus
Développement Course de Données

Les pointeurs sont compliqués II : Bogues subtils dans les optimisations LLVM

2025-02-02

Cet article explore l’importance d’une sémantique précise pour les représentations intermédiaires du compilateur (IR), en particulier pour les langages comme C, C++ et Rust qui permettent la manipulation de pointeurs non sécurisés. L’auteur montre comment une séquence de trois optimisations du compilateur LLVM apparemment correctes peut conduire à un comportement incorrect du programme. La cause première est la provenance des pointeurs : les informations supplémentaires intégrées à un pointeur au-delà de son adresse mémoire, qui précisent comment il a été calculé. Cela nécessite une spécification IR LLVM plus précise, y compris une définition précise du comportement indéfini (UB). Considérer les IR des compilateurs comme des langages de programmation autonomes avec des spécifications rigoureuses est essentiel pour résoudre ces problèmes.

Lire plus
Développement sémantique des pointeurs