Una correzione rash hà risultatu in una correzione incompleta per una vulnerabilità Spectre in u kernel Linux

Sviluppatori di u prugettu Grsecurity spartutu una storia di prudenza chì mostra cumu l'eliminazione imprudente di l'avvisi di compilatore pò purtà à vulnerabili in u codice. A fine di maghju, una correzione hè stata pruposta per u kernel Linux per un novu vettore di sfruttamentu di a vulnerabilità Spectre attraversu a chjama di u sistema ptrace.

Duranti a prova di u patch, i sviluppatori anu nutatu chì quandu si custruisce, u compilatore mostra un avvirtimentu nantu à a mistura di codice è di definizione (a struttura hè stata definita dopu à u codice, assignendu un valore à una variabile esistente):

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

Linus hà accettatu currezzione à u vostru ramu maestru, essendu liberatu da l'avvertimentu movendu a definizione di variabile à un bloccu if:

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

In u lugliu, a correzione hè stata ancu purtata à i rami di kernel stabile 4.4, 4.9, 4.14, 4.19 è 5.2. I mantenitori di e rami stabili anu ancu scontru l'avvirtimentu è, invece di verificà per vede s'ellu era digià riparatu in u ramu maestru di Linus, anu fattu una correzione. U prublema hè chì senza veramente pensà à questu, solu spustatu definisce a struttura up, cusì chì a chjama à array_index_nospec, chì furnisce direttamente prutezzione contru a vulnerabilità, ùn hè più utilizata quandu definisce a struttura, è invece di a variàbile "index" a variàbile "n" hè sempre usata:

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

Source: opennet.ru

Add a comment