Mega-Paket: Wie es den Entwicklern von Factorio gelungen ist, das Problem mit dem Multiplayer für 200 Spieler zu lösen

Die Entwickler des Grsecurity-Projekts teilten 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 Korrektur in seinen Master-Branch, indem er 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 die Definition der Struktur nach oben verschoben, sodass der Aufruf von array_index_nospec, der direkt den Schutz vor der Schwachstelle gewährleistete, bei der Definition der Struktur nicht mehr verwendet wurde und stattdessen immer die Variable „n“ anstelle der Variable „index“ verwendet wurde: 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

60GB SSD 8Gb DDR4