Làm cách nào để kiểm tra xem nhân Linux có bật Retpoline không hay không?


17

Đối với lỗ hổng bảo mật "Spectre", "Retpoline" được giới thiệu là một giải pháp để giảm thiểu rủi ro. Tuy nhiên, tôi đã đọc một bài viết đề cập:

Nếu bạn xây dựng kernel mà không có CONFIG_RETPOLINE, bạn không thể xây dựng các mô-đun bằng retpoline và sau đó mong đợi chúng tải - vì các biểu tượng thunk không được xuất.

Nếu bạn xây dựng kernel bằng retpoline, bạn có thể tải thành công các mô-đun không được xây dựng bằng retpoline. ( Nguồn )

Có cách nào dễ dàng và phổ biến / chung / thống nhất để kiểm tra xem kernel có được bật "Retpoline" hay không? Tôi muốn làm điều này để trình cài đặt của tôi có thể sử dụng bản dựng mô-đun hạt nhân thích hợp để cài đặt.

Câu trả lời:


21

Nếu bạn đang sử dụng hạt nhân chính hoặc hầu hết các hạt nhân phân phối chính, cách tốt nhất để kiểm tra hỗ trợ retpoline đầy đủ ( nghĩa là kernel đã được cấu hình CONFIG_RETPOLINEvà được xây dựng với trình biên dịch có khả năng retpoline) là tìm kiếm retpoline đầy đủ chung Mùi trong /sys/devices/system/cpu/vulnerabilities/spectre_v2. Trên hệ thống của tôi:

$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: Full generic retpoline, IBPB, IBRS_FW

Nếu bạn muốn kiểm tra toàn diện hơn, để phát hiện retpolines trên hạt nhân mà không có spectre_v2tệp systree, hãy kiểm tra xem spectre-meltdown-checkermọi thứ diễn ra như thế nào .


2
Để kiểm tra các lỗ hổng liên quan đến meltdown / bóng ma khác, hãy chạy $ grep . /sys/devices/system/cpu/vulnerabilities/*, được đề xuất trong blog của Greg Kroah-Hartman .
Alex Vong

1
Cảm ơn @Alex; Tôi đã trả lời câu hỏi cụ thể, nhưng điều đó rất hữu ích - mặc dù tôi thích head /sys/devices/system/cpu/vulnerabilities/*bản thân mình hơn ;-). Điều đó hiện đang bao gồm các lỗ hổng Meltdown / Spectre, nhưng cũng sẽ bao gồm mọi lỗ hổng trong tương lai có tính chất tương tự (không gian tên có mục đích chung chung).
Stephen Kitt

@StephenKitt Vâng, headcho đầu ra được định dạng đẹp hơn.
Alex Vong

4

Câu trả lời của Stephen Kitt là toàn diện hơn trong trường hợp cụ thể này, bởi vì hỗ trợ retpoline cũng cần phiên bản trình biên dịch mới.

Nhưng trong trường hợp chung, hầu hết các bản phân phối đều có tệp cấu hình kernel có sẵn ở một trong các vị trí sau:

  • /boot/config-4.xx.xx-...
  • /proc/config.gz

Sau đó, bạn có thể chỉ đơn giản là zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz


4
Tôi khuyên bạn không nên tham gia /boot/config*, bởi vì điều đó có thể tìm thấy CONFIG_RETPOLINEtrong một hình ảnh hạt nhân được cài đặt nhưng hiện không chạy, mang lại cảm giác an toàn sai lầm. Kiểm tra /proc/config.gzhoặc /sys/...an toàn, nhưng nhiều bản phân phối Linux biên dịch kernel mà không có /proc/config.gz.
pts

Bạn có thể làm cho logic thông minh hơn một chút và sử dụng uname (hoặc tòa nhà tương đương) để lấy kernel hiện đang chạy và sau đó kiểm tra tệp / boot / config cụ thể đó không?
Adam Luchjenbroers

@pts /boot/config-$(uname -r)thì sao?
muru

2
Việc sử dụng /boot/config-$(uname -r)không phải là chứng minh ngu ngốc: nó vẫn không đảm bảo rằng cấu hình phù hợp với kernel đang chạy. Các hạt nhân distro giữ giống nhau uname -rtrên nhiều phiên bản, miễn là nhân ABI không thay đổi.
Stephen Kitt

Cảm ơn tất cả các bạn đã trả lời. Câu trả lời và tin nhắn của bạn là hữu ích.
Weishan Yang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.