CVE-2026-80856 in Linux
Tóm tắt
Bởi VulDB • 04/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
fuse: sửa lỗi rò rỉ khóa invalidate khi thất bại trong writeback setattr
Hàm `fuse_do_setattr()` lấy `filemap_invalidate_lock()` cho thao tác truncate DAX (`fault_blocked = true`) và giải phóng nó tại các nhãn out/error. Tuy nhiên, khi cần thực hiện flush writeback, việc thất bại của `write_inode_now()` sẽ trả về trực tiếp mà không giải phóng khóa, dẫn đến rò rỉ khóa; do đó, bất kỳ lỗi (fault) hoặc truncate nào sau đó trên tệp tin này đều bị treo do chờ đợi rwsem đã cũ.
Ví dụ: lệnh `truncate(2)` trên một file setuid đạt tới `fuse_do_setattr()` với cả ATTR_SIZE và ATTR_MODE được đặt:
truncate(2) └─ do_truncate() ├─ dentry_needs_remove_privs() # S_ISUID └─ notify_change() # KILL_SUID -> ATTR_MODE └─ fuse_setattr() # không có killpriv: │ # ia_valid |= ATTR_MODE └─ fuse_do_setattr() ├─ filemap_invalidate_lock() # IS_DAX && is_truncate └─ write_inode_now() # is_wb && ATTR_MODE └─ if (err) # ví dụ: daemon -> -EIO return err # <- khóa bị rò rỉ
Khắc phục lỗi này bằng cách thêm một nhãn unlock để giải phóng khóa trước khi trả về lỗi, và áp dụng nó cho cả đường dẫn thất bại của `fuse_dax_break_layouts()`.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.