kgdb로 원격 시스템 라이브 디버깅하기
커널이 패닉 없이 그냥 멈추거나, 특정 syscall 경로에서만 간헐적으로 이상 동작을 보이는 경우 printk만으로는 원인을 좁히기 어렵다. dmesg에 로그를 더 찍고 재현하고 다시 빌드하는 사이클은 타이밍에 민감한 버그일수록 무력해진다. 이럴…
커널이 패닉 없이 그냥 멈추거나, 특정 syscall 경로에서만 간헐적으로 이상 동작을 보이는 경우 printk만으로는 원인을 좁히기 어렵다. dmesg에 로그를 더 찍고 재현하고 다시 빌드하는 사이클은 타이밍에 민감한 버그일수록 무력해진다. 이럴…
KASAN은 힙 오버플로우나 use-after-free를 잡아내는 데 강력하지만, 모든 할당에 리다이렉션 존(redzone)과 섀도 메모리 검사를 붙이는 방식이라 오버헤드가 크고 프로덕션에 상시 켜두기는 부담스럽다. KFENCE(Kernel Electric-Fence)는 이 문제를 확률적 샘플링으로 우회한다 —…
CPU 사용률은 낮은데 프로세스가 유독 느리게 느껴질 때가 있다. top이나 ps는 프로세스가 CPU를 얼마나 썼는지는 보여주지만, 그 프로세스가 CPU를 기다리느라 얼마나 시간을 날렸는지, 디스크 I/O나 스왑·메모리 회수 때문에 얼마나 블로킹됐는지는…
여러 개의 락(lock)을 다루는 드라이버나 서브시스템을 작성하다 보면, 어떤 경로에서는 lock_a를 먼저 잡고 lock_b를 나중에 잡는데 다른 경로에서는 반대로 lock_b를 먼저 잡는 실수를 저지르기 쉽다. 이런 ABBA 데드락은 두 경로가…
KASAN(Kernel Address SANitizer)은 리눅스 커널에서 메모리 버그를 탐지하고 디버깅하는 도구로, 메모리 오버플로우 및 언더플로우, use-after-free 같은 일반적인 메모리 관련 오류를 검출하는 데 도움을 준다. 이 글에서는 KASAN 사용 방법에 대해…