In útslach fix resultearre yn in ûnfolsleine fix foar in Spectre kwetsberens yn de Linux kernel

Untwikkelders fan it Grsecurity-projekt dield in warskôgingsferhaal dat oantoand hoe't gedachteleaze eliminaasje fan kompilator warskôgings kin liede ta kwetsberens yn 'e koade. Ein maaie waard in fix foarsteld foar de Linux-kernel foar in nije fektor fan eksploitaasje fan 'e Spectre-kwetsberens fia de ptrace-systeemoprop.

By it testen fan de patch merkten de ûntwikkelders op dat by it bouwen de kompilator in warskôging toant oer it mingjen fan koade en definysjes (de struktuer waard definieare nei de koade, it tawizen fan in wearde oan in besteande fariabele):

int index = n;
if (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[yndeks];

Linus akseptearre Korreksje nei dyn master tûke, kwyt te hawwen fan 'e warskôging troch de fariabele definysje te ferpleatsen nei in if-blok:

if (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[yndeks];

Yn july waard de fix ek porteare nei de stabile kernel-tûken 4.4, 4.9, 4.14, 4.19 en 5.2. Ek de ûnderhâlders fan de stâlfilialen kamen de warskôging tsjin en yn plak fan te kontrolearjen oft dy al fêstmakke wie yn de masterôfdieling fan Linus, makken se sels in reparaasje. It probleem is dat sûnder der echt oer nei te tinken, se gewoan ferhuze it definiearjen fan de struktuer omheech, sadat de oprop nei array_index_nospec, dy't direkt beskerming biedt tsjin 'e kwetsberens, net mear brûkt wurdt by it definiearjen fan 'e struktuer, en ynstee fan 'e fariabele "yndeks" wurdt de fariabele "n" altyd brûkt:

int index = n;
if (n <HBP_NUM){ struct perf_event *bp = thread->ptrace_bps[yndeks];
index = array_index_nospec(index, HBP_NUM);

Boarne: opennet.ru

Add a comment