Im Linux-Kernel wurde ein Fehler identifiziert, der zu Fehlfunktionen einiger Programme führt, die AVX verwenden

Im Linux-Kernel seit Release 5.2, ist manifestiert Ein Fehler, der dazu führt, dass der Inhalt des AVX-Registers verletzt wird, wenn von einem Signalhandler zurückgegeben wird, der behandelt wird, wenn eine Ausnahme ausgelöst wird (Seitenfehler). Das Problem tritt auf, wenn Multithread-Programme („-pthread“) ausgeführt werden, die Berechnungen mit dem AVX-Register beinhalten, wenn der Kernel in GCC 9 erstellt wurde (wenn er in früheren Versionen von GCC erstellt wurde, tritt der Fehler nicht auf, da GCC 9 zwischenspeichert). die Adresse der Thread-lokalen Variablen im Register, und frühere Versionen von GCC laden sie jedes Mal).

Das Problem führt dazu, dass das Programm vorzeitig mit einem Speicherbeschädigungsfehler beendet wird. Die auffälligste und am häufigsten beobachtete Manifestation des Fehlers Stahl stürzt ab Anwendungen, geschrieben in Go-Sprache. Aufgrund des genannten Problems werden Go-Programme vorzeitig beendet, normalerweise mit den Fehlern „Laufzeitfehler: ungültige Speicheradresse oder Nullzeiger-Dereferenzierung“, „Laufzeit: unerwartete PC-Rückgabe“ und „Segmentierungsverletzung“. Der Fehler im Kernel bleibt unbehoben. Die Möglichkeit wird geprüft Hinzufügen von Änderungen an der Laufzeit der Go-Sprache, um Fehler auf problematischen Linux-Kerneln selektiv zu umgehen, was zu einem zusätzlichen Overhead führt.

Source: opennet.ru

Kommentar hinzufügen