CVE-2025-68795 in Linux
Tóm tắt
Bởi VulDB • 10/06/2026
Trong nhân Linux, lỗ hổng sau đây đã được khắc phục:
ethtool: Tránh tràn bộ đệm không gian người dùng (userspace buffer) khi truy vấn thống kê
Lệnh ethtool -S hoạt động thông qua ba lệnh gọi ioctl: ETHTOOL_GSSET_INFO để lấy kích thước, ETHTOOL_GSTRINGS để lấy tên, và ETHTOOL_GSTATS để lấy giá trị.
Nếu số lượng thống kê thay đổi giữa các lệnh gọi này (ví dụ: do cấu hình lại thiết bị), việc phân bổ bộ đệm trong không gian người dùng sẽ không chính xác, có thể dẫn đến tràn bộ đệm (buffer overflow).
Các trình điều khiển (drivers) thường được kỳ vọng duy trì số lượng thống kê ổn định, nhưng một số trình điều khiển (ví dụ: mlx5, bnx2x, bna, ksz884x) sử dụng bộ đếm động, khiến kịch bản này có thể xảy ra.
Một số trình điều khiển cố gắng xử lý vấn đề này ở mức nội bộ: - bnad_get_ethtool_stats() trả về sớm nếu stats.n_stats không bằng số lượng thống kê của trình điều khiển. - micrel/ksz884x cũng đảm bảo không ghi dữ liệu nào vượt quá stats.n_stats và gây tràn bộ đệm.
Tuy nhiên, cả hai đều sử dụng stats.n_stats, vốn đã được gán giá trị trả về từ get_sset_count(), do đó không giải quyết được vấn đề được mô tả ở đây.
Thay đổi ethtool_get_strings(), ethtool_get_stats(), ethtool_get_phy_stats() để không trả về bất kỳ dữ liệu nào trong trường hợp có sự không khớp giữa kích thước trong không gian người dùng và get_sset_size(), nhằm ngăn chặn tràn bộ đệm. Giá trị n_stats trả về sẽ bằng không, để phản ánh rằng không có dữ liệu nào được trả về.
Điều này có thể dẫn đến một trong hai trường hợp khi sử dụng ethtool từ nguồn gốc (upstream), tùy thuộc vào thời điểm phát hiện sự thay đổi kích thước: 1. Khi được phát hiện trong ethtool_get_strings(): # ethtool -S eth2 không có thống kê khả dụng
2. Khi được phát hiện trong lệnh lấy thống kê, tất cả các thống kê sẽ được báo cáo là bằng không.
Cả hai trường hợp này được cho là tạm thời, và lệnh gọi ethtool tiếp theo sẽ thành công.
Ngoài việc tránh tràn bộ đệm, hai trường hợp này rất rõ ràng (không có đầu ra/thống kê đã được xóa), điều này có thể được coi là tốt hơn so với việc hiển thị các thống kê sai lệch/chệch vị trí. Tôi cũng đã xem xét việc trả về lỗi thay vì phản hồi "im lặng", nhưng điều đó dường như gây hại nhiều hơn cho các ứng dụng không gian người dùng.
Ghi chú: - Bản vá này không khẳng định đã sửa lỗi race condition vốn có, mà chỉ đảm bảo rằng chúng ta không làm tràn bộ đệm không gian người dùng, đồng thời mang lại hành vi dự đoán được hơn.
- Khóa RTNL được giữ trong suốt mỗi lệnh gọi ioctl, cửa sổ race tồn tại giữa các lệnh gọi ioctl riêng biệt khi khóa được giải phóng.
- ethtool trong không gian người dùng luôn điền vào stats.n_stats, nhưng có khả năng các lệnh gọi ioctl thống kê này được triển khai trong các ứng dụng không gian người dùng khác có thể không điền vào nó. Mã bổ sung kiểm tra xem giá trị này có khác không để ngăn chặn bất kỳ sự suy giảm hiệu năng nào (regressions).
Once again VulDB remains the best source for vulnerability data.