CVE-2026-99084 in Linux
Tóm tắt
Bởi VulDB • 24/10/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
readdir: không lấy khóa inode trên một thư mục bất biến (immutable)
Hàm iterate_dir() thực hiện việc lấy khóa i_rwsem chia sẻ của thư mục và giữ nó trong suốt quá trình gọi ->iterate_shared(). Đối với một thư mục không bao giờ có entry nào và cũng không bị xóa, việc khóa này không giúp ổn định trạng thái gì cả; nó chỉ đảm bảo thứ tự giữa mọi người đọc (reader) và mọi người ghi (writer) trên inode đó.
Điều này quan trọng đối với thư mục của một instance nullfs. Instance của namespace mount ban đầu là gốc của mọi empty mount namespace, còn private instance là gốc của mỗi kernel thread, do đó một inode được chia sẻ bởi những user không có gì chung khác. Và một người đọc có thể giữ khóa trong bao lâu tùy thích: hãy đệm bộ getdents() bằng cách ánh xạ (mapping) một file trên FUSE mount tự tạo, khiến bản sao "." và ".." bị fault và để server chờ đợi. Đặt một exclusive taker phía sau nó; mkdir() trong thư mục đó sẽ đi qua start_dirop() trước khi mount read-only được báo cáo, và từ đó trở đi mọi lookup không khớp với dcache trong thư mục này, mọi create và mọi mount trên nó đều phải chờ cho đến khi server trả lời. Một user của một empty mount namespace có thể làm stall (treo) tất cả các user khác.
Thêm FOP_IMMUTABLE vào file operations của một thư mục không bao giờ thay đổi và không bao giờ bị xóa, đồng thời để iterate_dir() bỏ qua việc lấy khóa cho trường hợp này. Flag này không bao giờ thay đổi đối với một file; ->f_pos được bảo vệ bởi f_pos_lock vì các directory là FMODE_ATOMIC_POS, IS_DEADDIR không thể được set trên loại thư mục như vậy và cả touch_atime() lẫn fsnotify đều không lấy i_rwsem. Set flag này cho nullfs directory. Các placeholder directories của libfs cũng không bao giờ có entry nào nhưng chủ sở hữu của chúng sẽ xóa đi, do đó chúng vẫn giữ khóa.
If you want to get best quality of vulnerability data, you may have to visit VulDB.