Rust 커널 프로그래밍 가이드 — Ubuntu에서 Rust for Linux 빌드 환경 만들기
업스트림 커널 소스를 --depth 1로 clone해서 rust_minimal.o를 빌드하는 데는 성공했지만, 그건 지금 부팅된 우분투 배포 커널과는 버전이 다른 별개의 트리였다. 실제로 insmod까지 되는지 확인하려면 "지금 이 컴퓨터가 실행 중인 커널"…
업스트림 커널 소스를 --depth 1로 clone해서 rust_minimal.o를 빌드하는 데는 성공했지만, 그건 지금 부팅된 우분투 배포 커널과는 버전이 다른 별개의 트리였다. 실제로 insmod까지 되는지 확인하려면 "지금 이 컴퓨터가 실행 중인 커널"…
1~3부에서 최소 모듈, misc device, 인터럽트 동기화를 각각 다뤘는데, 매번 module! 매크로부터 새로 채워나갔다. 실제로 새 모듈을 시작할 때는 그 반대가 편하다 — 어떤 필드가 필수고 어떤 게 선택인지, 초기화…
2부에서는 misc device의 상태를 Mutex로 보호했다. 그런데 Mutex::lock()은 경합이 발생하면 현재 태스크를 재웠다가 나중에 깨우는 방식으로 동작한다. 하드웨어 인터럽트 핸들러(hardirq context)는 애초에 "태스크"라는 개념이 없는 컨텍스트라 이 방식이 통하지 않는다.…
지난 글에서 살펴본 rust_minimal.rs는 로드되면 로그 몇 줄을 찍고 언로드되면 사라지는, 사실상 아무 일도 하지 않는 모듈이었다. 실제 드라이버라면 얘기가 다르다. 유저스페이스가 open()으로 열고, read()/write()로 데이터를 주고받고, ioctl()로 제어 명령을…
리눅스 커널 CVE 목록을 오래 들여다본 사람이라면 use-after-free, 버퍼 오버플로우, 널 포인터 역참조 같은 메모리 안전성 버그가 얼마나 자주 반복되는지 알 것이다. 리눅스 안정 커널 메인테이너 그렉 크로아-하트만은 지난 25년간의…