Làm thế nào để xác định mô-đun nào làm hỏng kernel?


7

Nhân của tôi tiếp tục hoảng loạn khi kết nối với một mạng không dây nhất định. Tôi muốn gửi một báo cáo lỗi nhưng hạt nhân của tôi rõ ràng đã bị hỏng. Từ /var/log/messages:

Apr 17 21:28:22 Eiger kernel: [13330.442453] Pid: 4095, comm: kworker/u:1 Tainted: G           O 3.8.4-102.fc17.x86_64 #1

[root@Eiger ~]# cat /proc/sys/kernel/tainted 
4096

Tôi đã không thể tìm tài liệu cho ý nghĩa của 4096 bitmask, nhưng Gcờ có nghĩa là mô-đun GPL bên ngoài được tải vào kernel. Làm thế nào để tôi tìm ra mô-đun nào làm mờ kernel?

Tôi đã tham [Tt]aintgia /var/log/messageshoặc dmesgkhông tìm thấy bất cứ điều gì tương ứng với khi mô-đun được tải. Hạt nhân của tôi là hạt nhân mới nhất từ ​​Fedora 17: 3.8.4-102.fc17.x86_64.

CẬP NHẬT : Nó có thể là do các rts5139mô-đun. Nó xuất hiện trong lsmodnhưng modinfo rts5139tạo ra ERROR: Module rts5139 not found. Khi khởi động kernel trước, 3.8.3-103.fc17.x86_64, mô-đun này không được liệt kê bởi lsmodvà kernel không bị nhiễm bẩn ( /proc/sys/kernel/taintlà 0).

Tôi đã thử đưa vào danh sách đen mô-đun này

echo 'blacklist rts5139' >> /etc/modprobe.d/blacklist.conf

nhưng khởi động lại vẫn hiển thị kernel như bị nhiễm độc.


2
Theo các tài liệu 4096 - An out-of-tree module has been loaded .
don_crissti

1
G luôn được in khi P không, nó không nhất thiết ngụ ý một mô-đun bên ngoài (mặc dù cờ O không).
Random832

@ Random832 Cảm ơn. Tôi nhận thấy cờ vẫn ở đó sau khi tôi cài đặt lại kernel. Tôi đã tự hỏi tại sao.
drs

Câu trả lời:


5

Chà, tôi không tin rằng một gói hạt nhân Fedora tiêu chuẩn sẽ bao gồm bất kỳ mô-đun nào sẽ kích hoạt lỗi này, vậy câu hỏi đặt ra là bạn đã cài đặt các mô-đun hạt nhân nào khác?

Các ứng cử viên phổ biến sẽ là trình điều khiển đồ họa (mặc dù tôi nghĩ rằng những người đó hầu hết sẽ thiết lập bit "độc quyền") và trình điều khiển không dây.

Nếu bạn có thể tìm thấy bất cứ điều gì trong lsmodđầu ra mà bạn nghĩ có thể là một ứng cử viên thì hãy chạy modinfo <module-name>và xem liệu đầu ra có bao gồm intree: Ybất kỳ mô-đun nào mà không có điều đó sẽ kích hoạt sự mờ nhạt mà bạn đang nhìn thấy hay không.

CẬP NHẬT : rts5139Mô-đun mà bạn đang thấylsmod nhưng dường như không có trên hệ thống của bạn có thể nằm trong initrd và đang được tải từ đó trong quá trình khởi động trước khi hệ thống tệp chính được gắn kết.

Điều đó cũng giải thích tại sao danh sách đen sẽ không hoạt động vì bạn sẽ phải xây dựng lại initrd với danh sách đen được cập nhật. dracutMặc dù vậy, việc xây dựng lại initrd sẽ khiến mô-đun biến mất.


Cảm ơn vì tiền boa, tôi đã thử lsmod | awk '{print $1}' | xargs modinfo -F intree. Thật không may, tất cả các kết quả Y, ngoại trừ một dòng,ERROR: Module rts5139 not found.
drs

1
@drs Trong trường hợp đó - bạn có chắc các mô-đun trong initrd của bạn khớp với các mô-đun đang chạy không? Đây có thể là một mô-đun bị nhiễm độc trong initrd là tốt.
Nils

Làm cách nào để kiểm tra các mô-đun trong initrd của tôi?
drs

1
Vâng để bắt đầu với việc sử dụng lsinitrdđể xem nếu rts5139có mặt.
TomH

@TomH Quả thực đây là trường hợp. Tôi đã gỡ bỏ kmod-staginggói, nhưng initrd vẫn chứa một số mô-đun dàn. Cài đặt lại kernel đã lừa. Nếu bạn cập nhật câu trả lời của bạn với thông tin này, tôi sẽ chấp nhận nó.
drs

4
➜  ~  dmesg | grep -i 'taint'
[   10.029333] vboxdrv: module verification failed: signature and/or required key missing - tainting kernel
[   10.029364] Disabling lock debugging due to kernel taint

3

Một cách khác để làm điều đó là kiểm tra tainttệp của mỗi mô-đun trong /sys/module:

#!/bin/bash

cat /proc/modules |
while read module rest
do
    if [[ $(od -A n /sys/module/$module/taint) != " 000012" ]] ; then
        echo $module
    fi
done

Nếu một mô-đun không có dấu vết thì tainttệp sẽ chỉ chứa một dòng mới, odđại diện là " 000012". Bạn không thể kiểm tra kích thước tệp vì tất cả các kích thước được liệt kê là 4.096 byte bất kể nội dung thực tế của chúng.


2

Đây có thể là (ít nhất, một phần) mô-đun hạt nhân vboxdrv của VirtualBox. Đó là GPL, nhưng các nhà bảo trì hạt nhân hiện gắn cờ các hạt nhân với nó được tải như bị nhiễm độc. Xem https://lkml.org/lkml/2011/10/6/317 để biết thông tin.

Không chắc chắn nếu dỡ bỏ mô-đun đó sẽ "không làm mờ" hạt nhân, nhưng nếu bạn đã tải nó, đó có thể là nguyên nhân gây ra nó (ít nhất là một phần).

Thông tin liên quan đến giá trị của số có thể được tìm thấy ở đây: http://kmaiti.blogspot.com/2011/09/how-to-check-whether-civerse-rasty.html Nó không cho bạn biết mô-đun nào, nhưng bạn Có thể thấy những lý do. Về cơ bản, nếu giá trị không bằng 0, nó sẽ bị hỏng.


VirtualBox không được cài đặt và vboxdrvkhông được liệt kê bởi lsmod. Tôi đã thấy danh sách các giá trị mờ hạt nhân trước đó. Tuy nhiên, 4096 không được liệt kê và nó không thể được tạo bằng cách kết hợp bất kỳ bit nào khác. Tôi đoán tài liệu này là cũ.
drs

1

Kiểm tra nhật ký khởi động của bạn hoặc xem quá trình khởi động của bạn trong giai đoạn đầu (trước khi các đĩa của bạn được gắn RW). Đây có thể là một mô-đun xấu trong initrd của bạn.

Bạn có DKMS hoặc một cái gì đó như thế tại chỗ?


Tôi không có DKMS. Tôi đã từng có kmod-staging để kích hoạt đầu đọc thẻ của mình, nhưng tôi đã gỡ bỏ nó một lúc trước.
drs

Vâng rts5139rõ ràng là một trình điều khiển cho một đầu đọc thẻ Realtek vì vậy tôi nghi ngờ bạn đã không được quản lý để hoàn toàn loại bỏ nó.
TomH

@drs nhìn bình luận từ TomH! Vì vậy, mô-đun hạt nhân có thể vẫn còn trong initrd của bạn.
Nils
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.