커널 설치가 세그폴트가 발생한 이유 추적하기
커널 설치 과정에서 발생한 segmentation fault 문제의 원인이 흥미롭게도 파일 하드링크 생성 도구인 hardlink 프로그램임이 밝혀졌습니다.
이 문제는 Gentoo 배포판의 커널 설치 스크립트가 dracut를 통해 initrd를 생성하는 과정에서 hardlink 명령어가 실행될 때 발생했습니다.
gdb 디버깅 결과, hardlink가 실행 중에 커널의 암호화 서브시스템(AF_ALG)과 관련된 영역에서 커널 oops를 유발하는 것으로 확인되었습니다.
hardlink는 파일 내용 비교를 위해 Linux crypto API를 사용하여 해시를 계산하는 최적화 기능을 내장하고 있었으며, 이 기능이 AF_ALG 소켓을 열어 커널의 취약한 암호화 경로를 호출했습니다.
해당 기능은 util-linux 패키지 내에서 하드링크 생성 시 파일 비교를 위한 옵션으로 기본 활성화되어 있었으나, 빌드 옵션 없이 항상 활성화되는 구조였습니다.
문제를 해결하기 위해 Gentoo에서는 util-linux 소스코드의 USE_FILEEQ_CRYPTOAPI 매크로를 주석 처리하는 패치를 적용하여 암호화 API 사용을 비활성화하고, 대신 단순 memcmp 방식으로 파일 비교를 수행하도록 변경했습니다.
이 조치로 segmentation fault가 발생하지 않고 정상적으로 커널 설치가 완료되었으며, 커널 측의 AF_ALG 관련 취약점 수정 과정에서 새로운 부작용이 발생했을 가능성이 제기되었습니다.
이번 사례는 커널과 사용자 공간 도구 간의 미묘한 상호작용이 시스템 안정성에 큰 영향을 미칠 수 있음을 보여주며, 관련 패치와 커널 보완 작업이 필요함을 시사합니다.