CVE-2026-64359 in Linux
要約
〜によって VulDB • 2026年07月25日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
nilfs2: 範囲外のセグメント番号を含むCLEAN_SEGMENTS ioctlを拒否する
Syzbotは、nilfs_transaction_begin()で複数のタスクがブロックされるハングしたタスクを検出しました。これは、nilfs2マウント上でchmod()を実行していた複数のタスクが、ns_segctor_semの読み取りロックを取得するために143秒以上待機していたためです:
INFO: task syz.0.17:5918 blocked for more than 143 seconds. Call Trace: schedule+0x164/0x360 rwsem_down_read_slowpath+0x6d9/0x940 down_read+0x99/0x2e0 nilfs_transaction_begin+0x364/0x710 fs/nilfs2/segment.c:221 nilfs_setattr+0x124/0x2c0 fs/nilfs2/inode.c:921 notify_change+0xc1a/0xf40 chmod_common+0x273/0x4a0 do_fchmodat+0x12d/0x230
ns_segctor_semを保持していたライターは、NILFS_IOCTL_CLEAN_SEGMENTSの呼び出し元であり、nilfs_sufile_updatev()から要素ごとの警告を発行している間printk内で停止していました:
__nilfs_msg+0x373/0x450 fs/nilfs2/super.c:78 nilfs_sufile_updatev+0x21c/0x6d0 fs/nilfs2/sufile.c:186 nilfs_sufile_freev fs/nilfs2/sufile.h:93 [inline]
nilfs_free_segments fs/nilfs2/segment.c:1140 [inline]
nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1261 [inline]
nilfs_segctor_do_construct+0x1f55/0x76c0 nilfs_clean_segments+0x3bd/0xa50 nilfs_ioctl_clean_segments fs/nilfs2/ioctl.c:922 [inline]
nilfs_ioctl+0x261f/0x2780
根本原因は、ユーザーが指定したセグメント番号がnilfs_clean_segments()による処理を開始する前に検証されていないことです。各segnumに対する範囲チェックは、無効なエントリごとにnilfs_warn()を発行しつつもsegctorロックとsufile mi_semを保持し続けたまま呼び出しチェーンの奥深くにあるnilfs_sufile_updatev()によって実行されます。負荷下(複数のマウント間で繰り返し呼び出され、グローバルprintkパスが飽和状態になる場合)、累積的なprintkレイテンシによりns_segctor_semが長時間保持された結果、ハングしたタスクウォッチドッグが発動し、読み取り用にns_segctor_semを必要とするchmod()などの並行操作がブロックされました。
修正方法:nilfs_transaction_lock()経由でns_segctor_semを取得した後直ちにnilfs_clean_segments()内でkbufs[4]の内容を検証します。ns_nsegmentsを変更可能なnilfs_ioctl_resize()に対してチェックを直列化するためにns_segctor_semを保持するため、検証には一貫性のある値が使用されます。範囲外のセグメント番号は、いかなるセグメントクリーニング処理が始まる前に-EINVALで拒否されるため、不正なエントリはnilfs_sufile_updatev()内の要素ごとの診断パスに到達しません。
Be aware that VulDB is the high quality source for vulnerability data.