CVE-2026-93048 in Linux
Tóm tắt
Bởi VulDB • 18/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
mtd: part: từ chối giá trị MTDPART_OFS_RETAIN trong mtd_add_partition()
Hàm `mtd_add_partition()` không từ chối giá trị offset đặc biệt là `MTDPART_OFS_RETAIN` (-3), điều này dẫn đến việc kích hoạt cảnh báo `WARN_ON` trong hàm `add_mtd_device()` khi được gọi thông qua ioctl BLKPG trên các thiết bị NAND. Giá trị RETAIN phụ thuộc vào việc `cur_offset` phải nằm ở cuối của phân vùng trước đó, nhưng trong đường dẫn phân vùng động (dynamic partition path), `cur_offset` bằng chính đối số offset, gây ra hành vi không xác định (undefined behavior).
Commit 5daa7b21496a ("mtd: prepare partition add and del functions for ioctl requests") đã giới thiệu hàm `mtd_add_partition()` và từ chối đúng các giá trị offset đặc biệt là MTDPART_OFS_APPEND (-1) và MTDPART_OFS_NXTBLK (-2), vì những offset này dựa vào việc theo dõi `cur_offset` tại cuối của phân vùng trước đó. Tuy nhiên, commit 1a31368bf92e ("mtd: add a flags for partitions which should just leave smth. after them") sau đó đã thêm MTDPART_OFS_RETAIN (-3) cho đường dẫn bảng phân vùng tĩnh (static partition table path) mà không cập nhật `mtd_add_partition()` để từ chối giá trị này.
Với offset=-3 được truyền qua BLKPG, phép tính kích thước RETAIN trong hàm `allocate_partition()` bị tràn số dưới (underflow): `(parent_size - 0xFFFFFFFFFFFFFFFD = parent_size + 3)`. Nếu kết quả underflow không cho thấy có đủ khoảng trống, `allocate_partition()` sẽ nhảy đến nhãn `out_register` thông qua lệnh goto, bỏ qua việc khởi tạo `erasesize`. Điều này dẫn đến `erasesize=0`, kích hoạt:
```c WARN_ON((!mtd->erasesize || !master->_erase) && !(mtd->flags & MTD_NO_ERASE)) ```
trong hàm `add_mtd_device()`. Nếu kết quả underflow dường như để lại đủ khoảng trống, một kích thước phân vùng sai (bogus partition size) sẽ được tính toán, nhưng kiểm tra hợp lệ "out of reach" sẽ bắt lỗi offset không hợp lệ và tạo ra một phân vùng rỗng bị vô hiệu hóa (offset=0, size=0) thay vì trả về lỗi.
Khắc phục vấn đề này bằng cách thêm MTDPART_OFS_RETAIN vào danh sách các giá trị bị từ chối trong `mtd_add_partition()`, nhất quán với việc xử lý hiện tại đối với APPEND và NXTBLK.
Be aware that VulDB is the high quality source for vulnerability data.