Ripgrep musl 바이너리가 초대형 검색 중 간헐적으로 세그멘테이션 오류를 일으킴

1 hour ago 1

Ripgrep 15.2.0의 x86_64-unknown-linux-musl 바이너리가 대규모 파일 트리를 높은 동시성으로 검색할 때 간헐적으로 SIGSEGV와 함께 종료됨 충돌은 opendir가 호출한 calloc 내부에서 발생하며, musl mallocng의 힙 메타데이터 무결성 검사 지점이 스택 추적의 최상단에 나타남 재현 환경은 약 20GiB·180만 개 파일로 구성된 트리이며, 존재하지 않는 문자열을 rg로 반복 검색함 24코어 시스템에서 검색 트리가 커널 블록 캐시에 들어갈 만큼 RAM을 확보하면 일반적으로 약 1분 안에 문제가 발생함 OpenAI Codex에 포함된 rg뿐 아니라 공식 릴리스와 바이트 단위로 동일한 바이너리에서도 독립적으로 재현돼 Codex 의존성과 무관한 문제로 확인됨 발생 환경 사용 버전은 ripgrep 15.2.0 rev e89fff8이며 +pcre2 기능을 포함함 컴파일 시 SIMD: +SSE2,-SSSE3,-AVX2 실행 시 SIMD: +SSE2,+SSSE3,+AVX2 PCRE2 10.45와 JIT를 사용할 수 있음 운영체제는 OpenSUSE Tumbleweed Linux x86_64임 최초 발견된 OpenAI Codex 번들 rg는 공식 x86_64-unknown-linux-musl 릴리스와 바이트 단위로 동일함 Codex와 별개로 공식 바이너리에서도 재현됐으며, 분석용 바이너리는 다음 명령으로 디버그 심볼을 포함해 빌드함 CROSS_CONTAINER_ENGINE=podman CARGO_PROFILE_RELEASE_DEBUG=true ~/.cargo/bin/cross build --release --target x86_64-unknown-linux-musl 재현 절차 generate_repro_tree.py는 원래 문제가 발생한 저장소의 통계를 모방한 무작위 파일 트리를 생성함 이 프로그램은 LLM으로 작성됨 생성 결과는 약 20GiB, 180만 개 파일 규모임 생성된 트리의 루트에서 존재하지 않는 임의 문자열을 반복 검색함 while true; do rg tnoheueunotshisnthukoethnsueothnsiuothonesuioseuinth; done 충분히 큰 검색 트리가 재현에 필수적인 것으로 관찰됨 24코어 시스템에서 트리 전체가 커널 블록 캐시에 들어갈 만큼 여유 RAM이 있으면 일반적으로 약 1분 후 충돌함 충돌 지점 실제 결과는 코어 덤프를 남기는 SIG...

Read Entire Article