리눅스에서 오염 된 커널은 무엇입니까?


99

특정 상황에서 Linux 커널이 더러워 질 수 있습니다 . 예를 들어, 독점 비디오 드라이버를 커널에로드하면 커널이 오염됩니다. 이 상태는 시스템 로그, 커널 오류 메시지 (oops and panics) 및와 같은 도구를 통해 표시 lsmod될 수 있으며 시스템이 재부팅 될 때까지 유지됩니다.

이것은 무엇을 의미 하는가? 시스템 사용 능력에 영향을 미치며 지원 옵션에 어떤 영향을 줄 수 있습니까?



@Gilles, 나는 당신과 관련된 질문이 이것에 병합되어야한다고 생각합니다. 또한 한 질문이 다른 질문과 중복된다는 것은 확실하지 않습니다.
bwDraco

1
나는 이것을 정식 버전의 질문으로 만들고자한다. 질문에 대한 최신 수정 사항을 참조하십시오.
bwDraco

9
@MichaelMrozek : 1) 기존의 질문을 보지 못했습니다. 사용자가 " '오염 된 것'이 무엇을 의미하는지"를 묻는 것이 확실하지 않았기 때문에 2) 단어의 질문은 단일 명령에만 국한된 것 lsmod입니다. 나는이 질문을 작성하여 "일반적인 것의 의미"를 묻는 사람이 쉽게 찾을 수 있도록 좀 더 일반적으로 만들었습니다.
bwDraco

1
그들은 "오염 된"것보다 약간 중립적 인 단어를 사용할 수있었습니다.
Roger Dahl

답변:


125

커널이 더러워 지면 커뮤니티에서 지원하지 않는 상태임을 의미합니다 . 대부분의 커널 개발자는 오염 된 커널과 관련된 버그 보고서를 무시하고 커뮤니티 회원은 커널과 관련된 문제 진단을 진행하기 전에 오염 상태를 수정하도록 요청할 수 있습니다. 또한 커널이 오염되면 일부 디버깅 기능 및 API 호출이 비활성화 될 수 있습니다.

독점 드라이버가 관련된 대부분의 경우, 오염 상태를 무시해도 안전 하지만 커널이 오염되는 일부 시나리오는 심각한 시스템 문제를 나타낼 수 있습니다.

이 기능은 커널 문제를 올바르게 해결하기 어려운 조건을 식별하기위한 것입니다. 예를 들어, 독점 모듈을로드하면 커널 개발자가 모듈의 소스 코드에 액세스 할 수 없으므로 모듈이 커널에 수행 한 작업을 확인할 수 없으므로 커널 디버그 출력을 신뢰할 수 없게 만들 수 있습니다. 마찬가지로 커널에 이전에 오류 조건이 발생했거나 심각한 하드웨어 오류가 발생한 경우 커널에서 생성 된 디버그 정보가 신뢰할 수 없습니다.

커널은 다음과 같은 여러 가지 이유로 오염 될 수 있습니다 .

  • 독점 (또는 비 GPL 호환) 커널 모듈 사용 — 이것은 오염 된 커널의 가장 일반적인 원인이며 일반적으로 독점 NVIDIA 또는 AMD 비디오 드라이버를로드 한 결과입니다
  • 커널 소스 코드의 일부이지만 완전히 테스트되지 않은 스테이징 드라이버 사용
  • 의 사용은 아웃 - 오브 - 트리 리눅스 커널 소스 코드에 포함되지 않은 모듈
  • 커널 모듈의 강제로드 또는 언로드 (예 : 현재 버전의 커널 용으로 빌드되지 않은 모듈을 강제로 삽입)
  • 지원되지 않는 특정 단일 프로세서 CPU (주로 이전 AMD Athlon 프로세서)에서 SMP (멀티 프로세서) 커널 사용
  • ACPI DSDT 재정의, 전원 관리 버그 수정에 필요한 경우가 있습니다 (자세한 내용은 여기 참조).
  • 머신 검사 예외커널 oopses 와 같은 특정 중요 오류 조건
  • 커널이 해결해야하는 시스템 펌웨어 (BIOS, UEFI)의 심각한 버그

이러한 각 조건은 커널에서 특정 플래그로 표시됩니다. SUSE와 같은 일부 Linux 공급 업체 는 공급 업체에서 지원하지 않는 모듈로드와 같은 조건을 표시하기 위해 추가로 오염 플래그추가 합니다.

자세한 내용은 커널 설명서를 참조하십시오 . 거기에 나열된 오염 플래그가 있습니다 (_ 'blank'의 스탠드 인으로)

  • G | P :로드 된 모든 모듈에 GPL 또는 호환 라이센스가있는 경우 G, 그렇지 않으면 독점 모듈이로드 된 것입니다. MODULE_LICENSE가 없거나 MODULE_LICENSE가있는 모듈은 insmod에 의해 GPL 호환으로 인식되지 않는 모듈은 독점적 인 것으로 간주됩니다.
  • F | _ : "insmod -f"로 모듈을 강제로드 한 경우 그렇지 않으면 모든 모듈이 정상적으로로드 된 경우.
  • S | _ : 멀티 프로세서를 실행하기에 안전한 것으로 인증되지 않은 하드웨어에서 실행되는 SMP 커널에서 oops가 발생한 경우. 현재 이것은 SMP가 불가능한 다양한 애슬론에서만 발생합니다.
  • R | _ :에 의해 모듈이 강제로 언로드 된 rmmod -f경우, 그렇지 않으면 모든 모듈이 정상적으로 언로드 된 경우.
  • M | _ : 프로세서가 Machine Check Exception을 보고 한 경우 그렇지 않은 경우 Machine Check Exception이 발생하지 않습니다.
  • B | _ : 페이지 해제 기능이 잘못된 페이지 참조 또는 예기치 않은 페이지 플래그를 발견 한 경우.
  • U | _ : 사용자 또는 사용자 애플리케이션이 Tainted 플래그 설정을 구체적으로 요청한 경우.
  • D | _ : 커널이 최근에 죽었다면, 즉 OOPS 또는 BUG가있었습니다.
  • A | _ : ACPI 테이블이 재정의 된 경우.
  • W | _ (. 일부 경고는 더 구체적인 더러운 플래그를 설정할 수 있지만) 경고가 이전에 커널에 의해 발행 된 경우
  • C | _ : 스테이징 드라이버가로드 된 경우
  • I | _ : 커널이 플랫폼 펌웨어 (BIOS 또는 이와 유사한)의 심각한 버그를 해결하는 경우.
  • O | _ : 외부 빌드 ( "트리 외부") 모듈이로드 된 경우
  • E | _ : 서명되지 않은 모듈이 모듈 서명을 지원하는 커널에로드 된 경우.
  • L | _ : 이전에 시스템에서 소프트 잠금이 발생한 경우.
  • K | _ : 커널이 실시간 패치 된 경우.

이 답변에는이 질문이 대체 한 dup에서 많은 정보가 빠져 있습니다.

2
"서명되지 않은 모듈"시나리오의 적어도 하나의 중요한 가능성을 추가하겠습니다. 커널 루트킷이 커널에로드되었거나 커널 익스플로잇이 막 실행되었습니다.
kravietz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.