CVE-2025-39735 in Linuxthông tin

Tóm tắt

Bởi VulDB • 29/06/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

jfs: sửa lỗi đọc vượt ra ngoài vùng nhớ slab (slab-out-of-bounds read) trong hàm ea_get()

Tại nhãn "size_check" trong hàm ea_get(), mã nguồn kiểm tra xem kích thước của danh sách thuộc tính mở rộng (xattr) có khớp với ea_size hay không. Nếu không, nó sẽ ghi log thông báo "ea_get: invalid extended attribute" và gọi print_hex_dump().

Trong trường hợp này, EALIST_SIZE(ea_buf->xattr) trả về giá trị 4110417968, vượt quá INT_MAX (2.147.483.647). Sau đó, ea_size bị giới hạn lại:

int size = clamp_t(int, ea_size, 0, EALIST_SIZE(ea_buf->xattr));

Mặc dù clamp_t nhằm mục đích ràng buộc ea_size trong khoảng từ 0 đến 4110417968, nhưng cận trên được xử lý như một kiểu int, gây ra hiện tượng tràn số (overflow) khi vượt quá 2^31 - 1. Điều này khiến "size" bị vòng lặp (wrap around) và trở thành giá trị âm (-184549328).

Giá trị "size" sau đó được truyền vào print_hex_dump() (được gọi là "len" trong print_hex_dump()). Nó được truyền dưới dạng kiểu size_t (một kiểu không dấu), sau đó được lưu trữ trong một biến có tên là "int remaining", rồi gán cho "int linelen". Cuối cùng, giá trị này được chuyển đến hex_dump_to_buffer(). Trong hàm print_hex_dump(), vòng lặp for sẽ duyệt qua các chỉ số từ 0 đến len-1, với len bằng 18446744073525002176, và gọi hex_dump_to_buffer() tại mỗi lần lặp:

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);

... }

Điều kiện dừng dự kiến (i < len) về cơ bản bị phá vỡ do giá trị len bị hỏng và rất lớn. Điều này cuối cùng dẫn đến việc "ptr+i" được truyền vào hex_dump_to_buffer() để tiến gần hơn đến ranh giới thực tế của "ptr". Cuối cùng, một truy cập vượt ra ngoài vùng nhớ (out of bounds access) xảy ra trong hàm hex_dump_to_buffer() tại vòng lặp for sau đây:

for (j = 0; j < len; j++) {
if (linebuflen < lx + 2) goto overflow2; ch = ptr[j];
... }

Để khắc phục vấn đề này, chúng ta nên xác thực "EALIST_SIZE(ea_buf->xattr)" trước khi sử dụng nó.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

chịu trách nhiệm

Linux

Đặt trước

16/04/2025

Tiết lộ

18/04/2025

Kiểm duyệt

được chấp nhận

EPSS

0.00228

KEV

không

Các hoạt động

rất thấp

Nguồn

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!