كابوس أمان الخيوط: تعطل غامض على ARM64، حتى مع Rust الآمن
2025-01-22
أثناء نقل كود مدخلات/مخرجات الشبكة من Python إلى Rust في EdgeDB، ظهر تعطل غامض على منصات ARM64. في البداية، تم الاشتباه في أنه حالة توقف، لكن السبب الجذري تبين أنه سلوك غير آمن للخيوط في وظيفتي `setenv` و `getenv`. على ARM64، تستخدم مكتبة `openssl-probe` وظيفة `setenv` لتعيين متغيرات البيئة، بينما تقوم خيط آخر باستدعاء `getenv` بشكل متزامن. هذا يعيد تخصيص مصفوفة `environ`، مما يؤدي إلى تعطل. تمثّل الحل في تبديل الجزء الخلفي TLS من reqwest من rust-native-tls إلى rustls. هذا يبرز كيف حتى في Rust الآمن للذاكرة، يمكن للتفاعلات مع مكتبة C القياسية أن تُدخِل مشاكل أمان الخيوط.