| タイトル | LinuxのLinux Kernelにおける不特定の脆弱性 |
|---|---|
| 概要 | Linuxカーネルにおいて、以下の脆弱性が修正されました。btrfsにおいて、ログ再生後にサイズが非ゼロであるにもかかわらず、ゼロサイズのinodeが設定される問題が修正されました。新しい名前のログ記録やディレクトリの新しいエントリのログ記録の一部としてinodeの存在をログ記録する際、ログされたinodeアイテムの世代は常に0に設定されます。これはログ再生時(overwrite_item()内)に、inodeが存在することだけをログしているためにi_sizeを設定すべきではなく、サブボリュームツリー内のinodeのi_sizeを保持する必要があることを示しています(新しい名前やinodeの存在だけをログするときはextentsはログしません)。しかしこれは、すでにフルモードでinodeがログされた場合や、過去のトランザクションで作成されたinodeを初めてログするときに、そのinodeの新しいi_sizeが0になる点に問題があります。新しい名前のログ(新しいハードリンクやリネームによる)を行うと、inodeのi_sizeが0かつ世代が0としてログされ、この場合ログ再生コードはinodeのi_sizeを0に更新しない(overwrite_item()内)という問題が発生します。具体的なシナリオ例は以下の通りです。mkdir /mnt/dir xfs_io -f -c "pwrite 0 64K" /mnt/dir/foo sync xfs_io -c "truncate 0" -c "fsync" /mnt/dir/foo ln /mnt/dir/foo /mnt/dir/bar xfs_io -c "fsync" /mnt/dir 電源断。ログ再生後、ファイルのサイズは64Kのまま残ります。これは最初にinodeをログするとき、fooファイルをfsyncした際に現在のi_sizeである0をログし、その後ハードリンクを作成するとinodeを存在モード(LOG_INODE_EXISTS)で再度ログしますが、ログツリーに追加するinodeアイテムの世代を0に設定しているため、ログ再生中にoverwrite_item()は世代とi_sizeの両方が0であることを検出し、inodeのi_sizeを64Kから0に更新する処理をスキップするためです。修正はfill_inode_item()において、現在のトランザクションでログしたi_sizeとともに実際のinodeの世代を常にログするようにし、過去のトランザクションで作成されたinodeが存在モードのみでログされた場合でも、コミットルートから取得したinodeアイテムのi_sizeをログすることで、複数回inodeの存在をログしても正しいi_sizeを得られるようにしました。fstests用のテストケースは近日中に提供される予定です。 |
| 想定される影響 | 当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年5月6日0:00 |
| 登録日 | 2026年5月11日11:07 |
| 最終更新日 | 2026年5月11日11:07 |
| CVSS3.0 : 警告 | |
| スコア | 5.5 |
|---|---|
| ベクター | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| Linux |
| Linux Kernel 2.6.30 以上 6.18.24 未満 |
| Linux Kernel 6.19 以上 6.19.14 未満 |
| Linux Kernel 7.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年05月11日] 掲載 |
2026年5月11日11:07 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: btrfs: fix zero size inode with non-zero size after log replay When logging that an inode exists, as part of logging a new name or This works fine except when we have already logged an inode in full mode An example scenario: mkdir /mnt/dir sync xfs_io -c "truncate 0" -c "fsync" /mnt/dir/foo ln /mnt/dir/foo /mnt/dir/bar xfs_io -c "fsync" /mnt/dir <power fail> After log replay the file remains with a size of 64K. This is because when Fix this by making sure at fill_inode_item() we always log the real A test case for fstests will follow soon. |
|---|---|
| 公表日 | 2026年5月6日19:16 |
| 登録日 | 2026年5月7日4:08 |
| 最終更新日 | 2026年5月9日2:30 |
| 構成1 | 以上 | 以下 | より上 | 未満 | |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 2.6.30 | 6.18.24 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 | 6.19.14 | |||
| cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:* | |||||