Linux Kernel

KFENCE: Kernel Electric-Fence

KASAN은 힙 오버플로우나 use-after-free를 잡아내는 데 강력하지만, 모든 할당에 리다이렉션 존(redzone)과 섀도 메모리 검사를 붙이는 방식이라 오버헤드가 크고 프로덕션에 상시 켜두기는 부담스럽다. KFENCE(Kernel Electric-Fence)는 이 문제를 확률적 샘플링으로 우회한다 —…

Continue ReadingKFENCE: Kernel Electric-Fence

Rust 커널 프로그래밍 가이드 — Ubuntu에서 Rust for Linux 빌드 환경 만들기

업스트림 소스를 --depth 1로 clone해 rust_minimal.o를 빌드하는 데는 성공했지만, 그 트리는 지금 부팅된 우분투 배포 커널과 버전이 다른 별개의 트리였다. 실제로 insmod까지 되려면 지금 실행 중인 커널 자체를 기준으로 빌드해야…

Continue ReadingRust 커널 프로그래밍 가이드 — Ubuntu에서 Rust for Linux 빌드 환경 만들기

Rust 커널 프로그래밍 가이드 (4) — 새 모듈을 시작할 때 쓰는 템플릿과 체크리스트

1~3부에서 최소 모듈, misc device, 인터럽트 동기화를 각각 다뤘는데, 매번 module! 매크로부터 새로 채워나갔다. 실제로 새 모듈을 시작할 때는 그 반대가 편하다 — 어떤 필드가 필수고 어떤 게 선택인지, 초기화…

Continue ReadingRust 커널 프로그래밍 가이드 (4) — 새 모듈을 시작할 때 쓰는 템플릿과 체크리스트

Rust 커널 프로그래밍 가이드 (3) — Arc/SpinLock으로 인터럽트 컨텍스트에서 상태 공유하기

2부에서는 misc device의 상태를 Mutex로 보호했다. 그런데 Mutex::lock()은 경합이 발생하면 현재 태스크를 재웠다가 나중에 깨우는 방식으로 동작한다. 하드웨어 인터럽트 핸들러(hardirq context)는 애초에 "태스크"라는 개념이 없는 컨텍스트라 이 방식이 통하지 않는다.…

Continue ReadingRust 커널 프로그래밍 가이드 (3) — Arc/SpinLock으로 인터럽트 컨텍스트에서 상태 공유하기

Rust 커널 프로그래밍 가이드 (2) — Misc Device 드라이버로 배우는 open, read/write, ioctl

지난 글에서 살펴본 rust_minimal.rs는 로드되면 로그 몇 줄을 찍고 언로드되면 사라지는, 사실상 아무 일도 하지 않는 모듈이었다. 실제 드라이버라면 얘기가 다르다. 유저스페이스가 open()으로 열고, read()/write()로 데이터를 주고받고, ioctl()로 제어 명령을…

Continue ReadingRust 커널 프로그래밍 가이드 (2) — Misc Device 드라이버로 배우는 open, read/write, ioctl

Rust 커널 프로그래밍 가이드 (1) — 커널이 Rust를 받아들인 이유와 최소 모듈 작성

리눅스 커널 CVE 목록을 오래 들여다본 사람이라면 use-after-free, 버퍼 오버플로우, 널 포인터 역참조 같은 메모리 안전성 버그가 얼마나 자주 반복되는지 알 것이다. 리눅스 안정 커널 메인테이너 그렉 크로아-하트만은 지난 25년간의…

Continue ReadingRust 커널 프로그래밍 가이드 (1) — 커널이 Rust를 받아들인 이유와 최소 모듈 작성

io_uring이 커널 7.2에서 도입한 Lockless MPSC 큐

io_uring을 쓰는 프로그램은 한 번에 여러 비동기 작업을 던져놓고 진행 상황을 추적한다. 그 말은 곧 커널 내부의 io_uring 서브시스템이 처리해야 할 작업(task) 목록을 항상 관리하고 있어야 한다는 뜻이다. 지금까지 io_uring은…

Continue Readingio_uring이 커널 7.2에서 도입한 Lockless MPSC 큐

Januscape(CVE-2026-53359): 16년 묵은 KVM 섀도 페이징 버그가 Intel·AMD 게스트를 호스트로 뚫은 이유

퍼블릭 클라우드에서 VM 인스턴스 하나를 빌리는 일은 호스트 커널이나 같은 물리 서버 위에서 도는 다른 테넌트의 VM에는 손댈 수 없다는 전제 위에 서 있습니다. KVM(Kernel-based Virtual Machine)의 섀도 페이징(shadow paging)…

Continue ReadingJanuscape(CVE-2026-53359): 16년 묵은 KVM 섀도 페이징 버그가 Intel·AMD 게스트를 호스트로 뚫은 이유

Ubuntu 커널 보안 패치(USN) 확인하고 적용하는 방법

Ubuntu 서버를 운영하다 보면 apt upgrade 알림이나 MOTD에서 "N개의 보안 업데이트가 있습니다" 같은 문구를 자주 보게 된다. 그런데 막상 그 N개가 어떤 취약점(CVE)을 고치는 건지, 커널 패치라 재부팅이 꼭 필요한지,…

Continue ReadingUbuntu 커널 보안 패치(USN) 확인하고 적용하는 방법