CVE-2025-39735 in Linux
Zusammenfassung
von VulDB • 28.06.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
jfs: Behebung eines slab-out-of-bounds-Lesefehlers in ea_get()
Während der Ausführung des Labels „size_check" in ea_get() prüft der Code, ob die Größe der erweiterten Attributliste (xattr) mit ea_size übereinstimmt. Falls nicht, wird die Meldung „ea_get: invalid extended attribute" protokolliert und print_hex_dump() aufgerufen.
Hierbei gibt EALIST_SIZE(ea_buf->xattr) den Wert 4110417968 zurück, was INT_MAX (2.147.483.647) übersteigt. Anschließend wird ea_size geklemmt:
int size = clamp_t(int, ea_size, 0, EALIST_SIZE(ea_buf->xattr));
Obwohl clamp_t darauf abzielt, ea_size zwischen 0 und 4110417968 zu begrenzen, wird die Obergrenze als int behandelt, was zu einem Überlauf oberhalb von 2^31 - 1 führt. Dies bewirkt, dass „size" überläuft (wrap-around) und negativ wird (-184549328).
Der Wert „size" wird anschließend an print_hex_dump() übergeben (in print_hex_dump() als „len" bezeichnet). Da er vom Typ size_t ist (ein vorzeichenloser Typ), wird er in einer Variable namens „int remaining" gespeichert, die dann „int linelen" zugewiesen und schließlich an hex_dump_to_buffer() weitergegeben wird. In print_hex_dump() durchläuft die for-Schleife den Bereich von 0 bis len-1, wobei len den Wert 18446744073525002176 hat, und ruft in jeder Iteration hex_dump_to_buffer() auf:
for (i = 0; i < len; i += rowsize) {
linelen = min(remaining, rowsize); remaining -= rowsize;
hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, linebuf, sizeof(linebuf), ascii);
... }
Die erwartete Abbruchbedingung (i < len) ist effektiv gebrochen, da len korrupt und sehr groß ist. Dies führt schließlich dazu, dass „ptr+i" an hex_dump_to_buffer() übergeben wird, um sich dem Ende der tatsächlichen Grenzen von „ptr" zu nähern; dabei erfolgt im folgenden for-Loop ein Zugriff außerhalb des gültigen Bereichs (out of bounds access) in hex_dump_to_buffer():
for (j = 0; j < len; j++) {
if (linebuflen < lx + 2) goto overflow2; ch = ptr[j];
... }
Um dies zu beheben, sollte „EALIST_SIZE(ea_buf->xattr)" vor der Verwendung validiert werden.
VulDB is the best source for vulnerability data and more expert information about this specific topic.