🇰🇷 한글 설명
리눅스 커널의 batman-adv 모듈에서 bla_purge_claims() 함수가 RCU 잠금 하에서 클레임 목록을 순회할 때, 병렬로 실행되는 batadv_claim_put()으로 인해 해제 중인 객체에 접근하는 문제가 있습니다. 이로 인해 backbone_gw가 NULL로 설정된 후 batadv_bla_claim_get_backbone_gw() 호출 시 NULL 포인터 역참조로 인한 크래시가 발생할 수 있습니다.
💡 쉬운 설명
네트워크 관리 소프트웨어인 batman-adv에서 메모리 해제 과정 중 잘못된 데이터에 접근하는 오류가 있습니다. 이 오류는 시스템이 예상치 못하게 충돌하거나 멈추게 만들 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
batman-adv: bla: only purge non-released claims
When batadv_bla_purge_claims() goes through the list of claims, it is only
traversing the hash list with an rcu_read_lock(). Due to a potential
parallel batadv_claim_put(), it can happen that it encounters a claim which
was actually in the process of being released+freed by
batadv_claim_release(). In this case, backbone_gw is set to NULL before the
delayed RCU kfree is started. Calling batadv_bla_claim_get_backbone_gw() is
then no longer allowed because it would cause a NULL-ptr derefence.
To avoid this, only claims with a valid reference counter must be purged.
All others are already taken care of.
📍 영향받는 시스템
Linux kernel (batman-adv 모듈 포함)
⚔️ 공격 벡터
로컬에서 batman-adv 네트워크 트래픽을 생성하여 동시성 조건을 유발
🛡️ 대응 방법
리눅스 커널을 최신 안정 버전으로 업데이트하여 batadv_bla_purge_claims()의 참조 카운터 검증 로직을 적용
🔧 검증 코드
출력된 커널 버전이 패치가 적용된 최신 버전인지 확인