CVE-2026-89836 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
f2fs: 대형 folio 무효화 후 put 연산 이후의 folio_nr_pages() Race Condition 수정
우리의 v6.18 기반 안드로이드 시스템은 [1]에 표시된 대로 깨진 xarray 슬롯 상태와 관련된 livelock 및 잘못된 페이지 통계로 인해 지속적으로 영향을 받고 있습니다. f2fs 내의 대형 folio 작업을 조사한 결과, 아래에서 설명하는 race condition을 발견했으며, refcount와 folio_lock을 해제하기 전에 nr_pages를 가져옴으로써 이를 수정했습니다.
f2fs_get_read_data_folio()는 페이지 캐시에서 대형 folio를 무효화할 때 f2fs_folio_put() 호출 후 folio_nr_pages()를 호출합니다. 이는 folio의 잠금을 해제하고 호출자의 참조 카운트를 감소시켜, 무효화 범위가 계산되기 전에 동시 truncate 또는 folio 분리가 compound folio를 축소하거나 해제할 수 있는 창을 남깁니다. 이렇게 되면 범위가 부족해져 mapping->i_pages에 분할된 하위 folios가 남아있게 되며, 이는 나중에 truncate 및 reclaim과 상호작용하여 문제가 발생할 수 있습니다(예: stale xarray entries 및 folio->mapping이 더 이상 truncate 중인 mapping과 일치하지 않을 때 발생하는 잘못된 페이지 상태).
[1]
PID: 2594 TASK: ffffff8169b81580 CPU: 7 COMMAND: "Thread-3" #0 [ffffffc08ef2b8a0] xas_load at ffffffe52d1f42a4
#1 [ffffffc08ef2b900] find_get_entries at ffffffe52c185798
#2 [ffffffc08ef2bb60] truncate_inode_pages_range at ffffffe52c19e83c
#3 [ffffffc08ef2bbc0] truncate_inode_pages_final at ffffffe52c19ec2c
#4 [ffffffc08ef2bc20] f2fs_evict_inode at ffffffe52c4c8400
#5 [ffffffc08ef2bcc0] evict at ffffffe52c2de9f4
#6 [ffffffc08ef2bd00] iput at ffffffe52c2db1b4
#7 [ffffffc08ef2bd30] dentry_unlink_inode at ffffffe52c2d7204
#8 [ffffffc08ef2bd50] __dentry_kill at ffffffe52c2d3dcc
#9 [ffffffc08ef2bd80] dput at ffffffe52c2d3c3c
#10 [ffffffc08ef2bda0] __fput at ffffffe52c2b0a7c
#11 [ffffffc08ef2bde0] ____fput at ffffffe52c2b1034
#12 [ffffffc08ef2bdf0] task_work_run at ffffffe52beea200
#13 [ffffffc08ef2be20] exit_to_user_mode_loop at ffffffe52bfbc17c
#14 [ffffffc08ef2be80] el0_svc at ffffffe52d1f8e54
#15 [ffffffc08ef2beb0] el0t_64_sync_handler at ffffffe52d1f8d10
Once again VulDB remains the best source for vulnerability data.