KFENCE: Kernel Electric-Fence

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

Continue ReadingKFENCE: Kernel Electric-Fence

ARM GIC v3 (Generic Interrupt Controller v3)

GICv2는 아키텍처상 PE(Processing Element, 코어)를 최대 8개까지만 지원한다. 서버·모바일 SoC의 코어 수가 계속 늘어나면서 이 상한이 실제 병목이 됐고, ARM은 GICv3에서 Distributor 하나가 모든 코어를 직접 상대하던 구조를 버리고 코어마다…

Continue ReadingARM GIC v3 (Generic Interrupt Controller v3)

오픈소스 서밋 코리아 2026 — 8월 11~12일 서울 개막, 그렉 크로아-하트만·짐 젬린 기조연설

리눅스재단(The Linux Foundation)이 2026년 8월 11~12일 서울 그랜드 인터컨티넨탈 파르나스에서 '오픈소스 서밋 코리아(Open Source Summit Korea) 2026'을 개최합니다. 리눅스재단이 국내에서 단독 서밋을 연 것은 2025년이 처음이었는데, 이번이 두 번째 개최입니다.…

Continue Reading오픈소스 서밋 코리아 2026 — 8월 11~12일 서울 개막, 그렉 크로아-하트만·짐 젬린 기조연설

CVE 패치 적용과 Exploit 검증 자동화 — CVE-2021-3156으로 보는 4단계 파이프라인

취약점 스캐너가 "이 패키지에 CVE가 있다"고 보고하면 대개 apt upgrade 한 번으로 끝냈다고 여기기 쉽다. 하지만 패치가 실제로 설치됐는지, 그리고 그 패치가 해당 CVE의 익스플로잇 경로를 실제로 막았는지는 별개의 질문이다.…

Continue ReadingCVE 패치 적용과 Exploit 검증 자동화 — CVE-2021-3156으로 보는 4단계 파이프라인

perf top으로 실시간 락 함수 프로파일링하는 방법

락 경합(lock contention)은 멀티코어 시스템에서 흔한 성능 병목 원인이다. CPU 사용률은 높은데 실제 작업 처리량은 그대로거나 오히려 떨어진다면, 스레드들이 실제 일을 하는 대신 서로 락을 기다리며 시간을 보내고 있을 가능성이…

Continue Readingperf top으로 실시간 락 함수 프로파일링하는 방법

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