🔵 عنوان مقاله
How we found a bug in Go's arm64 compiler (11 minute read)
🟢 خلاصه مقاله:
Cloudflare یک باگ از نوع race condition را در کامپایلر Go برای معماری arm64 پیدا کرد که باعث panicهای پراکنده روی ماشینهای arm64 به دلیل خرابشدن پشته میشد. این باگ وقتی فعال میشد که asynchronous preemption دقیقا بین دستورهای تنظیم پیاپی اشارهگر پشته در جریان garbage collection رخ میداد و در نتیجه پشته موقتا در وضعیت نامعتبر دیده میشد.
راهکار این است که بهجای تغییر پلهای اشارهگر پشته، ابتدا offset در یک رجیستر موقت ساخته میشود و سپس همان مقدار در قالب یک opcode غیرقابلتفکیک به RSP اضافه میگردد تا اشارهگر پشته همواره معتبر باشد. این اصلاح در نسخههای go1.23.12، go1.24.6 و go1.25.0 منتشر شده و کاربران Go روی arm64 باید برای جلوگیری از این کرشهای نادر اما جدی، ارتقا دهند.
#Go #arm64 #Compiler #RaceCondition #Cloudflare #GarbageCollection #Concurrency #BugFix
🟣لینک مقاله:
https://blog.cloudflare.com/how-we-found-a-bug-in-gos-arm64-compiler/?utm_source=tldrdevops
➖➖➖➖➖➖➖➖
👑 @DevOps_Labdon
How we found a bug in Go's arm64 compiler (11 minute read)
🟢 خلاصه مقاله:
Cloudflare یک باگ از نوع race condition را در کامپایلر Go برای معماری arm64 پیدا کرد که باعث panicهای پراکنده روی ماشینهای arm64 به دلیل خرابشدن پشته میشد. این باگ وقتی فعال میشد که asynchronous preemption دقیقا بین دستورهای تنظیم پیاپی اشارهگر پشته در جریان garbage collection رخ میداد و در نتیجه پشته موقتا در وضعیت نامعتبر دیده میشد.
راهکار این است که بهجای تغییر پلهای اشارهگر پشته، ابتدا offset در یک رجیستر موقت ساخته میشود و سپس همان مقدار در قالب یک opcode غیرقابلتفکیک به RSP اضافه میگردد تا اشارهگر پشته همواره معتبر باشد. این اصلاح در نسخههای go1.23.12، go1.24.6 و go1.25.0 منتشر شده و کاربران Go روی arm64 باید برای جلوگیری از این کرشهای نادر اما جدی، ارتقا دهند.
#Go #arm64 #Compiler #RaceCondition #Cloudflare #GarbageCollection #Concurrency #BugFix
🟣لینک مقاله:
https://blog.cloudflare.com/how-we-found-a-bug-in-gos-arm64-compiler/?utm_source=tldrdevops
➖➖➖➖➖➖➖➖
👑 @DevOps_Labdon
The Cloudflare Blog
How we found a bug in Go's arm64 compiler
84 million requests a second means even rare bugs appear often. We'll reveal how we discovered a race condition in the Go arm64 compiler and got it fixed.
❤1