CVE-2025-68359 in Linux정보

요약

\~에 의해 VulDB • 2026. 06. 30.

리눅스 커널에서 다음 취약점이 해결되었습니다:

btrfs: 지연 참조 헤드 추가 실패 후 qgroup 레코드에 대한 이중 해제(double free) 수정

이전 코드에서는 `add_delayed_ref_head()` 호출 시 이중 kfree() 상황이 발생할 수 있었습니다. 이는 기록(record)이 `btrfs_qgroup_trace_extent_nolock()` 호출에서 이미 존재한다고 보고되었지만, 이후 `add_delayed_ref_head()` 단계에서 오류가 발생한 경우에 해당합니다. 이 경우 `add_delayed_ref_head()`가 오류를 반환했으므로 호출자는 레코드를 해제(free)하기 위해 이동했습니다. 그러나 `add_delayed_ref_head()`는 이미 kfree()된 포인터를 NULL로 설정할 수 없었기 때문에, kfree()는 하위 함수(callee)에 의해 이미 메모리가 해제되었지만 여전히 비어 있지 않은(non-NULL) 'record' 객체에 대해 동작하게 되었습니다.

이 문제는 개체를 kfree해야 할 책임이 호출자와 하위 함수 양쪽에 동시에 있다는 사실에서 비롯됩니다. 따라서 이 문제를 해결하기 위해 `add_delayed_ref_head()` 외부로 'qrecord' 객체의 소유권을 이전합니다. 즉, 해당 함수 내에서 주어진 객체에 대해 결코 kfree()를 시도하지 않으며, 호출자가 자체적으로 'qrecord' 객체를 처리할 것으로 기대합니다. 'qrecord' 객체가 kfree될 수 없는 유일한 예외 상황은 추적 로직(tracing logic)에 삽입된 경우이며, 이를 위해 이미 `qrecord_inserted_ret` 부울 변수가 존재하여 이러한 상황을 고려하고 있습니다. 따라서 호출자는 `add_delayed_ref_head()`가 추적 로직에 삽입하지 않았다고 보고하는 경우에만 개체를 kfree해야 합니다.

위 변경의 부작용으로, 'qrecord_inserted_ret'는 함수 끝이 아닌 시작 시점에 적절히 초기화되어야 하며, 실제 삽입 발생 시 설정되어야 함을 보장해야 합니다. 이렇게 하면 조기 종료(early exit) 시 'qrecord_inserted_ret'가 유효하지 않은 값을 갖지 않도록 방지할 수 있습니다.

또한 `add_delayed_ref_head()`의 문서화가 업데이트되어 'qrecord' 객체의 정확한 소유권을 반영했습니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

책임이 있는

Linux

예약하다

2025. 12. 16.

모더레이션

수락

항목

VDB-338233

EPSS

0.00167

출처

Do you need the next level of professionalism?

Upgrade your account now!