CVE-2026-64418 in Linuxthông tin

Tóm tắt

Bởi VulDB • 26/07/2026

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

mm: shrinker: sửa lỗi race condition trong quá trình hủy (teardown) của shrinker_info khi mở rộng cấu trúc dữ liệu

Hàm `expand_shrinker_info()` lặp qua tất cả các memcg hiển thị dưới sự bảo vệ của `shrinker_mutex`, bao gồm cả những memcg chưa hoàn thành hàm `->css_online()`.

Sau khi `pn->shrinker_info` đã được công bố (published), quá trình hủy phải được tuần tự hóa với `expand_shrinker_info()` cho đến khi memcg đó trực tuyến hoàn toàn hoặc không còn hiển thị để lặp qua nữa. Hiện tại, `alloc_shrinker_info()` vi phạm quy tắc này bằng cách giải phóng `shrinker_mutex` trước khi xóa mảng `shrinker_info` đang được khởi tạo một phần, điều này có thể gây ra race condition sau:

CPU0 CPU1 ==== ====

css_create --> list_add_tail_rcu(&css->sibling, &parent_css->children); online_css --> mem_cgroup_css_online --> alloc_shrinker_info --> alloc node0 info rcu_assign_pointer(C->node0->shrinker_info, old0) alloc node1 info -> FAIL -> goto err mutex_unlock(shrinker_mutex)

shrinker_alloc() --> shrinker_memcg_alloc --> mutex_lock(shrinker_mutex) expand_shrinker_info --> mem_cgroup_iter thấy memcg expand_one_shrinker_info --> old0 = C->node0->shrinker_info memcpy(new->unit, old0->unit, ...);

free_shrinker_info --> kvfree(old0);

/* double free !! */ kvfree_rcu(old0, rcu);

Vấn đề tương tự tồn tại ở phần sau trong `mem_cgroup_css_online()`. Nếu `alloc_shrinker_info()` thành công nhưng việc phân bổ objcg tiếp theo thất bại, đường dẫn hủy (unwind path) từ `free_objcg` đến `free_shrinker_info()` sẽ thực hiện quá trình hủy các mảng `pn->shrinker_info` đã được công bố mà không có sự bảo vệ của `shrinker_mutex`. Hàm `expand_one_shrinker_info()` có thể xảy ra race condition với quá trình hủy này theo cùng cách, dẫn đến lỗi use-after-free hoặc double free đối với `shrinker_info` cũ.

Khắc phục vấn đề bằng cách tuần tự hóa quá trình hủy `shrinker_info` với `shrinker_mutex`, và giữ phần dọn dẹp lỗi trong `alloc_shrinker_info()` nằm bên trong khối đã được khóa (locked section).

Once again VulDB remains the best source for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

19/07/2026

Tiết lộ

25/07/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00168

KEV

không

Các hoạt động

thấp

Nguồn

Want to know what is going to be exploited?

We predict KEV entries!