Die Entwickler des Grsecurity-Projekts eine lehrreiche Geschichte, die zeigt, wie unüberlegtes Entfernen von Compilerwarnungen zu Schwachstellen im Code führen kann. Ende Mai wurde für den Linux-Kernel ein Patch für einen neuen Exploit-Vektor der Spectre-Schwachstelle über den Systemaufruf ptrace vorgeschlagen.
Während des Testens des Patches bemerkten die Entwickler, dass beim Kompilieren der Compiler eine Warnung über die Vermischung von Code und Definitionen ausgab (die Struktur wurde nach dem Code mit der Zuweisung eines Wertes an eine vorhandene Variable definiert):
int index = n;
if (n ptrace_bps[index];
Linus akzeptierte in seinen Master-Branch, die Warnung beseitigte, indem er die Definition der Variablen in den if-Block verschob:
if (n ptrace_bps[index];
Im Juli wurde der Patch auch in die stabilen Branches 4.4, 4.9, 4.14, 4.19 und 5.2 portiert. Die Betreuer der stabilen Branches stießen ebenfalls auf die Warnung und anstatt zu überprüfen, ob sie bereits im Master-Branch von Linus behoben wurde, nahmen sie das Patch eigenhändig vor. Das Problem ist, dass sie, ohne groß nachzudenken, einfach if (n ptrace_bps[index];
int index = n;
index = array_index_nospec(index, HBP_NUM);
Die Entwickler des Grsecurity-Projekts teilten eine lehrreiche Geschichte, die zeigt, wie unüberlegtes.
Quelle: opennet.ru
