Shoshilinch tuzatish natijasida Linux yadrosidagi Spectre zaifligi toΚ»liq tuzatilmadi

Grsecurity loyihasini ishlab chiquvchilar birgalikda kompilyator ogohlantirishlarini beparvolik bilan yo'q qilish koddagi zaifliklarga qanday olib kelishi mumkinligini ko'rsatadigan ogohlantiruvchi ertak. May oyining oxirida Linux yadrosi uchun ptrace tizimi chaqiruvi orqali Spectre zaifligidan foydalanishning yangi vektori uchun tuzatish taklif qilindi.

Yamoqni sinovdan o'tkazish jarayonida ishlab chiquvchilar qurish paytida kompilyator kod va ta'riflarni aralashtirish haqida ogohlantirishni ko'rsatishini payqashdi (tuzilish koddan keyin mavjud o'zgaruvchiga qiymat berish bilan aniqlangan):

int indeksi = n;
agar (n < HBP_NUM) { indeks = massiv_index_nospec(indeks, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[indeks];

Linus qabul qildi tuzatish usta filialingizga, qutulish o'zgaruvchining ta'rifini if ​​blokiga o'rash orqali ogohlantirishdan:

agar (n < HBP_NUM) { int indeks = massiv_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[indeks];

Iyul oyida tuzatish 4.4, 4.9, 4.14, 4.19 va 5.2 barqaror yadro shoxlariga ham oΚ»tkazildi. Stabil qo'riqchilari ham ogohlantirishga duch kelishdi va u allaqachon Linusning asosiy filialida o'rnatilganligini tekshirish o'rniga, uni o'zlari tuzatdilar. Muammo shundaki, ular ko'p o'ylamasdan, shunchaki ko'chib o'tdi strukturaning ta'rifi yuqoriga ko'tarildi, shunda zaiflikdan bevosita himoyani ta'minlaydigan array_index_nospec ga qo'ng'iroq endi tuzilma ta'rifida ishlatilmaydi va "index" o'zgaruvchisi o'rniga har doim "n" o'zgaruvchisi ishlatilgan:

int indeksi = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[indeks];
indeks = massiv_index_nospec(indeks, HBP_NUM);

Manba: opennet.ru

a Izoh qo'shish