Cauchemar de sécurité des threads : un plantage mystérieux sur ARM64, même avec Rust sécurisé
Lors du portage du code d’E/S réseau de Python vers Rust dans EdgeDB, un plantage mystérieux est survenu sur les plateformes ARM64. Initialement suspecté d’être un blocage, la cause racine s’est avérée être un comportement non sécurisé pour les threads dans les fonctions `setenv` et `getenv`. Sur ARM64, la bibliothèque `openssl-probe` utilise `setenv` pour définir des variables d’environnement, tandis qu’un autre thread appelle concurremment `getenv`. Cela réaloue le tableau `environ`, entraînant un plantage. La solution a consisté à changer le backend TLS de reqwest de rust-native-tls à rustls. Cela souligne comment, même dans Rust sécurisé en mémoire, les interactions avec la bibliothèque standard C peuvent toujours introduire des problèmes de sécurité des threads.