Utvecklarna av Grsecurity-projektet en lärande historia som visar hur tankspritt borttagande av kompilatorvarningar kan leda till sårbarheter i koden. I slutet av maj föreslogs en lösning för den nya exploateringsvektorn av Spectre genom systemanropet ptrace till Linux-kärnan.
Under testningen av patchen noterade utvecklarna att kompilatorn påpekade en varning vid sammanställningen gällande blandning av kod och definitioner (strukturen definierades efter koden med tilldelning av värdet till en befintlig variabel):
int index = n;
if (n ptrace_bps[index];
Linus accepterade i sin master-gren, eliminera varningen genom att flytta definitionen av variabeln till if-blocket:
if (n ptrace_bps[index];
I juli portades fixen också till stabila grenar av kärnan 4.4, 4.9, 4.14, 4.19 och 5.2. Underhållarna av de stabila grenarna stötte också på varningen och istället för att kontrollera om den redan hade åtgärdats i Linus master-gren, gjorde de själva en fix. Problemet är att de, utan att tänka på det, helt enkelt definitionsstrukturen uppåt, så att anropet array_index_nospec, som direkt skyddade mot sårbarheten, slutade användas vid definitionen av strukturen, och istället för variabeln "index" användes alltid variabeln "n":
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Källa: opennet.ru
