Lưu ý
Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.
- Bản gốc:
- Người dịch:
Google Translate (machine translation)
- Phiên bản gốc:
8541d8f725c6
Cảnh báo
Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.
Kiểm soát đầu cơ¶
Khá nhiều CPU có các tính năng sai liên quan đến suy đoán. lỗ hổng thực tế gây rò rỉ dữ liệu dưới nhiều hình thức khác nhau, thậm chí trên khắp các miền đặc quyền.
Hạt nhân cung cấp khả năng giảm thiểu các lỗ hổng như vậy trong nhiều các hình thức. Một số biện pháp giảm thiểu này có thể cấu hình được trong thời gian biên dịch và một số có thể được cung cấp trên dòng lệnh kernel.
Ngoài ra còn có một loại biện pháp giảm thiểu rất tốn kém, nhưng chúng có thể bị hạn chế ở một tập hợp các quy trình hoặc nhiệm vụ nhất định được kiểm soát môi trường. Cơ chế kiểm soát các biện pháp giảm nhẹ này là thông qua ZZ0000ZZ.
Có hai tùy chọn prctl có liên quan đến điều này:
PR_GET_SPECULATION_CTRL
PR_SET_SPECULATION_CTRL
PR_GET_SPECULATION_CTRL¶
PR_GET_SPECULATION_CTRL trả về trạng thái sai sót đầu cơ được chọn bằng arg2 của prctl(2). Giá trị trả về sử dụng các bit 0-3 với ý nghĩa sau đây (với lời cảnh báo rằng PR_SPEC_L1D_FLUSH ít rõ ràng hơn ngữ nghĩa, hãy xem tài liệu về điều khiển cụ thể đó bên dưới):
Nếu tất cả các bit bằng 0 thì CPU không bị ảnh hưởng bởi tính năng suy đoán sai.
Nếu PR_SPEC_PRCTL được đặt thì việc kiểm soát giảm thiểu theo mỗi tác vụ sẽ là có sẵn. Nếu không được đặt, prctl(PR_SET_SPECULATION_CTRL) cho suy đoán tính năng sai sẽ thất bại.
PR_SET_SPECULATION_CTRL¶
PR_SET_SPECULATION_CTRL cho phép kiểm soát tính năng sai suy đoán, được chọn bởi arg2 của ZZ0000ZZ cho mỗi tác vụ. arg3 được sử dụng để bàn tay trong giá trị điều khiển, tức là PR_SPEC_ENABLE hoặc PR_SPEC_DISABLE hoặc PR_SPEC_FORCE_DISABLE.
Mã lỗi phổ biến¶
Mã lỗi PR_SET_SPECULATION_CTRL¶
Kiểm soát tính năng sai suy đoán¶
PR_SPEC_STORE_BYPASS: Bỏ qua cửa hàng đầu cơ
- Lời kêu gọi:
prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, 0, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_ENABLE, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_FORCE_DISABLE, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE_NOEXEC, 0, 0);
- PR_SPEC_INDIR_BRANCH: Suy đoán nhánh gián tiếp trong quy trình người dùng
(Giảm thiểu các cuộc tấn công kiểu Spectre V2 chống lại quy trình của người dùng)
- Lời kêu gọi:
prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, 0, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_ENABLE, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_DISABLE, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_FORCE_DISABLE, 0, 0);
- PR_SPEC_L1D_FLUSH: Xóa bộ nhớ đệm L1D khi chuyển ngữ cảnh ra khỏi tác vụ
(chỉ hoạt động khi các tác vụ chạy trên lõi không phải SMT)
Đối với điều khiển này, PR_SPEC_ENABLE có nghĩa là ZZ0000ZZ được bật (L1D bị xóa), PR_SPEC_DISABLE có nghĩa là nó bị vô hiệu hóa.
- Lời kêu gọi:
prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_L1D_FLUSH, 0, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_L1D_FLUSH, PR_SPEC_ENABLE, 0, 0);
prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_L1D_FLUSH, PR_SPEC_DISABLE, 0, 0);