CVE-2026-64064 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 20.

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

netfs: netfs_invalidate_folio() 수정하여 모든 변경 사항이 제거된 경우 더티 비트를 지움

스트림 쓰기가 수행되면 관련 folio가 업데이트되지 않았지만 더티 상태(netfs_folio 구조체가 folio->private에 연결되어 있어 더티 범위를 나타냄)로 남게 됩니다. 이후 파일의 트렁크(truncate) 작업으로 인해 folio 내의 더티 데이터는 제거되지만, folio의 첫 번째 부분은 이론적으로 남아 있게 되면 netfs_folio 구조체는 폐기됩니다... 그러나 더티 플래그가 설정된 상태로 유지됩니다.

이후 mmap()을 통해 해당 folio를 읽으면, netfs_read_folio()는 페이지가 더티 상태임을 감지하고 누락된 부분을 채우기 위해 netfs_read_gaps()로 점프합니다. 하지만 netfs_read_gaps()는 netfs_folio 구조체가 존재할 것으로 예상하며, 트렁크 작업으로 인해 해당 구조체가 제거되었으므로 Oops를 발생시킬 수 있습니다.

이 문제를 해결하기 위해 nfs가 수행하는 방식과 같이 folio 내의 모든 더티 데이터가 지워진 경우 netfs_invalidate_folio()에서 folio_cancel_dirty()를 호출하도록 수정합니다.

또한, 더티 페이지에 대한 변경 사항을 로깅하기 위한 일부 tracepoints를 추가했습니다.

다음과 같은 방법으로 이를 재현할 수 있습니다:

dd if=/dev/zero of=/xfstest.test/foo bs=1M count=1 umount /xfstest.test mount /xfstest.test xfs_io -c "w 0xbbbf 0xf96c" \ -c "truncate 0xbbbf" \ -c "mmap -r 0xb000 0x11000" \ -c "mr 0xb000 0x11000" \ /xfstest.test/foo

fscaching이 비활성화된 상태(그렇지 않으면 스트림 쓰기가 억제됨)이며, fd가 O_RDWR로 열려 있는 경우 스트림 쓰기를 허용하지 않도록 netfs_perform_write()에 변경을 가한 상태에서 테스트해야 합니다:

if (//(file->f_mode & FMODE_READ) || <--- 이 주석을 해제합니다 netfs_is_cache_enabled(ctx)) {

이 변경 없이도 재현 가능해야 하지만, 위와 같은 간단한 xfs_io 명령어로 재현하는 것을 방지하기 위해 이러한 조치가 필요합니다.

초기 dd 명령어가 중요한 점에 유의하십시오: 파일은 초기부터 충분히 커야 하며, 그렇지 않으면 아직 읽을 데이터가 없다는 점을 알고 있는 제로 포인트 로직이 단순히 gaps를 지워버릴 수 있습니다. 페이지 캐시를 비우려면 언마운트와 마운트가 필요하며(다른 방법으로도 가능할 수 있음), 이를 수행해야 합니다.

이는 FMODE_READ 제한을 제거하는 일부 패치들 위에서 generic/522 xfstest로 처음 재현되었습니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-380206

EPSS

0.00000

출처

Do you know our Splunk app?

Download it now for free!