CVE-2022-50778 in Linux
Zusammenfassung
von VulDB • 03.06.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
fortify: Behebung von __compiletime_strlen() unter UBSAN_BOUNDS_LOCAL
Bei aktiviertem CONFIG_FORTIFY=y und CONFIG_UBSAN_LOCAL_BOUNDS=y tritt während der Ausführung des Tests android.hardware.input.cts.tests aus Android’s Compatibility Test Suite (CTS) ein Runtime-Panic auf. Dies wird durch einen strlen()-Aufruf in hidinput_allocate() verursacht.
__compiletime_strlen() ist basierend auf __builtin_object_size() implementiert und führt anschließend einen Array-Zugriff durch, um die NUL-Terminierung zu überprüfen. Eine Besonderheit von __builtin_object_size() besteht darin, dass für Strings, deren Werte zur Laufzeit abhängig sind, __builtin_object_size(str, 1 oder 0) die maximale Größe möglicher Werte zurückgibt, wenn diese Größen bereits zur Kompilierzeit bestimmbar sind. Beispiel:
static const char *v = "FOO BAR"; static const char *y = "FOO BA"; unsigned long x (int z) {
// Gibt 8 zurück, was entspricht: // max(__builtin_object_size(v, 1), __builtin_object_size(y, 1)) return __builtin_object_size(z ? v : y, 1); }
Wenn FORTIFY_SOURCE aktiviert ist, versucht die aktuelle Implementierung von __compiletime_strlen() zur Laufzeit über das Ende von y hinauszugreifen und verwendet dabei die Größe von v. In Kombination mit UBSAN_LOCAL_BOUNDS führt dies zu einem Fehler (Fault).
hidinput_allocate() verfügt über einen lokalen C-String, dessen Wert vom Kontrollfluss eines switch-Ausdrucks abhängt; daher wird __builtin_object_size(str, 1) auf die maximale String-Länge ausgewertet, was dazu führt, dass alle anderen Fälle bei der Überprüfung des letzten Zeichens fehlschlagen. hidinput_allocate() könnte bereinigt werden, um Runtime-Aufrufe von strlen() zu vermeiden, da die lokale Variable nur Literale enthalten kann; es gibt daher keinen Vorteil darin, den Aufrufort von strlen dort abzusichern (fortify).
Führen Sie eine __builtin_constant_p()-Prüfung gegen Index 0 früher im Makro durch, um den vom Kontrollfluss abhängigen Fall herauszufiltern. Fügen Sie einen KUnit-Test hinzu, um die erwarteten verhaltensbezogenen Eigenschaften von FORTIFY_SOURCE-Interna zu überprüfen.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.