🔍 CVE-2026-64064

5.5
CVSS Score
MEDIUM
2026-07-19
2026-09-03 15:36
✅ 완료

🇰🇷 한글 설명

Linux 커널의 netfs 구성 요소에서 파일 절단(truncate) 작업 시 dirty 비트가 제대로 해제되지 않는 취약점이 발견되었습니다. 이로 인해 mmap()을 통해 파일을 읽을 때 존재하지 않는 netfs_folio 구조체에 접근하게 되어 커널 패닉(oops)이 발생할 수 있습니다.

💡 쉬운 설명

파일의 일부를 삭제한 후 다시 읽으려고 할 때, 컴퓨터가 잘못된 메모리 정보를 참조하여 시스템이 갑자기 멈추거나 오류를 일으킬 수 있는 문제입니다. 특정 조건에서 데이터가 수정되었다는 표시가 잘못 남아 있어 발생하는 현상입니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: netfs: Fix netfs_invalidate_folio() to clear dirty bit if all changes gone If a streaming write is made, this will leave the relevant modified folio in a not-uptodate, but dirty state with a netfs_folio struct hung off of folio->private indicating the dirty range. Subsequently truncating the file such that the dirty data in the folio is removed, but the first part of the folio theoretically remains will cause the netfs_folio struct to be discarded... but will leave the dirty flag set. If the folio is then read via mmap(), netfs_read_folio() will see that the page is dirty and jump to netfs_read_gaps() to fill in the missing bits. netfs_read_gaps(), however, expects there to be a netfs_folio struct present and can oops because truncate removed it. Fix this by calling folio_cancel_dirty() in netfs_invalidate_folio() in the event that all the dirty data in the folio is erased (as nfs does). Also add some tracepoints to log modifications to a dirty page. This can be reproduced with something like: 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 with fscaching disabled (otherwise streaming writes are suppressed) and a change to netfs_perform_write() to disallow streaming writes if the fd is open O_RDWR: if (//(file->f_mode & FMODE_READ) || <--- comment this out netfs_is_cache_enabled(ctx)) { It should be reproducible even without this change, but if prevents the above trivial xfs_io command from reproducing it. Note that the initial dd is important: the file must start out sufficiently large that the zero-point logic doesn't just clear the gaps because it knows there's nothing in the file to read yet. Unmounting and mounting is needed to clear the pagecache (there are other ways to do that that may also work). This was initially reproduced with the generic/522 xfstest on some patches that remove the FMODE_READ restriction.

📍 영향받는 시스템

Linux kernel (netfs 구성 요소가 포함된 버전)

⚔️ 공격 벡터

로컬 사용자가 특정 파일 시스템 작업(streaming write 후 truncate 및 mmap)을 수행하여 커널 오류 유도

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 netfs_invalidate_folio() 함수 수정 사항을 반영해야 합니다.

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel