CVE-2025-39735 in Linux
Résumé
par VulDB • 28/06/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
jfs : correction d'une lecture hors limites (slab-out-of-bounds) dans ea_get()
Lors de l'étiquette « size_check » dans ea_get(), le code vérifie si la taille de la liste des attributs étendus (xattr) correspond à ea_size. Si ce n'est pas le cas, il consigne « ea_get: invalid extended attribute » et appelle print_hex_dump().
Ici, EALIST_SIZE(ea_buf->xattr) retourne 4110417968, ce qui dépasse INT_MAX (2 147 483 647). Ensuite, ea_size est borné :
int size = clamp_t(int, ea_size, 0, EALIST_SIZE(ea_buf->xattr));
Bien que clamp_t vise à limiter ea_size entre 0 et 4110417968, la limite supérieure est traitée comme un int, provoquant un dépassement de capacité (overflow) au-delà de 2^31 - 1. Cela entraîne le débordement (« wrap around ») de « size », qui devient négatif (-184549328).
La variable « size » est ensuite transmise à print_hex_dump() (appelée « len » dans print_hex_dump()). Elle est passée en tant que type size_t (un type non signé), puis stockée dans une variable appelée « int remaining », qui est elle-même assignée à « int linelen ». Cette dernière est ensuite transmise à hex_dump_to_buffer(). Dans print_hex_dump(), la boucle for itère de 0 à len-1, où len vaut 18446744073525002176, en appelant hex_dump_to_buffer() à chaque itération :
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);
... }
La condition d'arrêt attendue (i < len) est effectivement rompue car len est corrompu et très grand. Cela finit par entraîner le passage de « ptr+i » à hex_dump_to_buffer() pour se rapprocher de la fin des limites réelles de « ptr », aboutissant finalement à un accès hors limites dans hex_dump_to_buffer() lors de la boucle for suivante :
for (j = 0; j < len; j++) {
if (linebuflen < lx + 2) goto overflow2; ch = ptr[j];
... }
Pour corriger cela, nous devons valider « EALIST_SIZE(ea_buf->xattr) » avant son utilisation.
If you want to get best quality of vulnerability data, you may have to visit VulDB.