CVE-2026-89688 in Linux
Tóm tắt
Bởi VulDB • 12/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
nfsd: giải phóng stateid thay vì stateowner khi thử lại replay seqid_op
Hàm nfs4_preprocess_seqid_op() lấy stateid từ nfsd4_lookup_stateid(), hàm này giữ một tham chiếu trên nfs4_stid (sc_count) nhưng không giữ tham chiếu nào lên stateowner. openlockstateid() chỉ thực hiện ép kiểu stid đó và cũng không giữ bất kỳ tham chiếu nào.
Khi nfsd4_cstate_assign_replay() trả về -EAGAIN (chủ thể replay đang bị hủy, RP_UNHASHED), nó đã không lấy một tham chiếu stateowner trên đường dẫn này. Tuy nhiên, xử lý lỗi vẫn gọi đến nfs4_put_stateowner(stp->st_stateowner), làm giảm tham chiếu so_count mà hàm chưa từng nắm giữ -- gây rủi ro tràn ngược bộ đếm refcount của stateowner và use-after-free (sử dụng sau khi giải phóng) -- đồng thời rò rỉ tham chiếu sc_count đang được giữ trên stid. Tham chiếu stid bị rò rỉ này cũng có thể làm tắc nghẽn một nfsd4_close_open_stateid() đang chờ song song cho đến khi sc_count giảm xuống.
Hãy giải phóng đúng tham chiếu đang nắm giữ -- tức là stid -- trước khi thử lại. Stateowner vẫn tồn tại nhờ vào tham chiếu được giữ bởi stid. Điều này phản ánh đường dẫn mở trong nfsd4_process_open1(), nơi lệnh put cân bằng với một tham chiếu mà đường dẫn đó rõ ràng đang giữ trên stateowner.
Once again VulDB remains the best source for vulnerability data.