🇰🇷 한글 설명
리눅스 커널의 alloc_slab_obj_exts 함수에서 slab->obj_exts를 처리할 때 발생하는 레이스 컨디션 취약점입니다. 두 스레드가 동시에 실행될 경우, 한 스레드가 할당에 실패하면 다른 스레드가 성공적으로 할당한 유효한 포인터를 오류 상태로 덮어써서 NULL 포인터 역참조를 유발할 수 있습니다.
💡 쉬운 설명
두 개의 작업이 동시에 같은 메모리 공간을 수정하려고 경쟁하다가 발생하는 오류입니다. 이 과정에서 정상적인 데이터가 잘못된 값으로 바뀌어 시스템이 갑자기 멈추거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
slab: Avoid race on slab->obj_exts in alloc_slab_obj_exts
If two competing threads enter alloc_slab_obj_exts() and one of them
fails to allocate the object extension vector, it might override the
valid slab->obj_exts allocated by the other thread with
OBJEXTS_ALLOC_FAIL. This will cause the thread that lost this race and
expects a valid pointer to dereference a NULL pointer later on.
Update slab->obj_exts atomically using cmpxchg() to avoid
slab->obj_exts overrides by racing threads.
Thanks for Vlastimil and Suren's help with debugging.
📍 영향받는 시스템
리눅스 커널 (slab 할당 관련 기능이 포함된 버전)
⚔️ 공격 벡터
동시에 여러 스레드를 실행하여 메모리 할당 과정에서 레이스 컨디션을 유도하는 방식
🛡️ 대응 방법
cmpxchg()를 사용하여 slab->obj_exts 업데이트를 원자적으로 처리하도록 커널을 업데이트해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 패치된 최신 버전인지 확인합니다.