CVE-2022-48733 in Linux정보

요약

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

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

btrfs: 스냅샷 생성 실패 후 use-after-free 수정

ioctl.c의 create_snapshot() 함수에서는 대기 중인 스냅샷 구조체를 할당한 후 이를 트랜잭션의 대기 중 스냅샷 목록에 연결합니다. 이후 btrfs_commit_transaction()을 호출하며, 여기서 오류가 반환되면 'fail' 레이블로 점프하여 kfree()를 통해 대기 중인 스napshot 구조체를 해제합니다. 이로 인해 나중에 대기 중인 스냅샷에 대한 use-after-free가 발생할 수 있습니다:

1) 대기 중인 스냅샷을 할당하고 트랜잭션의 대기 중 스냅샷 목록에 추가했습니다;

2) btrfs_commit_transaction()을 호출하지만, 첫 번째 btrfs_run_delayed_refs() 또는 btrfs_start_dirty_block_groups() 호출 시 실패합니다. 두 경우 모두 트랜잭션을 중단하지 않고 트랜잭션 핸들을 해제합니다. 'fail' 레이블로 점프하여 대기 중인 스냅샷 구조체를 해제합니다. 그러나 대기 중인 스냅샷은 여전히 트랜잭션 목록에 남아 있는 상태로 반환됩니다;

3) 다른 태스크가 트랜잭션을 커밋합니다. 이번에는 전혀 오류가 발생하지 않으며, 트랜잭션 커밋 과정에서 스냅샷 생성 태스크가 이미 해제한 대기 중 스냅샷 구조체에 대한 포인터를 접근하게 되어 use-after-free가 발생합니다.

이 문제는 smatch로 실제로 감지할 수 있었으며, smatch는 다음과 같은 경고를 생성했습니다:

fs/btrfs/ioctl.c:843 create_snapshot() warn: '&pending_snapshot->list' not removed from list

따라서 스냅샷 생성 ioctl이 대기 중인 스냅샷을 트랜잭션 목록에 직접 추가하지 않도록 하여 이 문제를 해결합니다. 대신 대기 중인 스napshot을 트랜잭션 핸들에 추가한 후, btrfs_commit_transaction()에서 이후 지점에서 반환되는 모든 오류가 트랜잭션 중단으로 이어진다고 보장할 수 있는 경우에만 스냅샷을 목록에 추가합니다. 이렇게 하면 ioctl 코드가 안전하게 대기 중인 스냅샷을 해제할 수 있으며 더 이상 아무도 이에 접근할 수 없게 됩니다.

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

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!