| Title | LinuxのLinux Kernelにおける不特定の脆弱性 |
|---|---|
| Summary | Linuxカーネルにおいて、以下の脆弱性が修正されました。ext4においてI/Oを送信する前に分割する際に、EXT4_GET_BLOCKS_CONVERTを設定しないようにしました。EOF内DIOおよびdioread_nolockが有効なwriteback時のブロック割り当てでは、既存の大きな未書き込みエクステントを分割するためにEXT4_GET_BLOCKS_PRE_IOが設定されていました。しかし、ext4_split_convert_extents()呼び出し時にEXT4_GET_BLOCKS_CONVERTが設定されており、これにより古いデータの問題が発生する可能性がありました。未書き込みエクステントがあり、DIOが後半を書き込むケースを考えます。 「[UUUUUUUUUUUUUUUU]」はon-diskエクステントを表し、「U」は未書き込みエクステントを示します。エクステント状態ツリーは「[UUUUUUUUUUUUUUUU]」です。dioはこの範囲を書き込みます。まず、ext4_iomap_alloc()はEXT4_GET_BLOCKS_PRE_IO、EXT4_GET_BLOCKS_UNWRIT_EXT、およびEXT4_GET_BLOCKS_CREATEフラグを設定してext4_map_blocks()を呼び出します。ext4_map_blocks()はこのエクステントを見つけ、EXT4_GET_BLOCKS_CONVERTを含むフラグと共にext4_split_convert_extents()を呼び出します。次に、ext4_split_convert_extents()はEXT4_EXT_MAY_ZEROOUT、EXT4_EXT_MARK_UNWRIT2、EXT4_EXT_DATA_VALID2フラグを設定してext4_split_extent()を呼び出し、さらにEXT4_EXT_DATA_VALID2、EXT4_EXT_MARK_UNWRIT1、EXT4_EXT_MAY_ZEROOUT、EXT4_EXT_MARK_UNWRIT2フラグを設定して後半を分割するためにext4_split_extent_at()を呼び出します。しかし、ext4_split_extent_at()は一時的な-ENOSPC不足のためエクステントを挿入できずに失敗します。先頭半分をゼロクリアしますが、EXT4_EXT_DATA_VALID2フラグが設定されているため、on-diskのエクステント全体がライト済みに変換されます。一方で、エクステント状態ツリーの後半は未書き込みのまま残ります。 「[0000000000SSSSSS]」はデータを表し、「S」は古いデータ、「0」はゼロクリア済みを示します。また、「[WWWWWWWWWWWWWWWW]」はon-diskエクステントを表し、「W」は書き込み済みエクステントを示します。エクステント状態ツリーは「[WWWWWWWWWWUUUUUU]」となります。最終的に、DIOがディスクへの書き込みに失敗した場合、キャッシュされたエクステントエントリがなくなると後半の古いデータが露出します。この問題は、I/Oを送信する前に未書き込みエクステントを分割する際にEXT4_GET_BLOCKS_CONVERTを渡さないようにし、ext4_split_convert_extents()においてこのケースではエクステント全体をゼロクリアし、一貫性を保つためにエクステント状態ツリーでもマークすることで修正されました。 |
| Possible impacts | ・当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 ・当該ソフトウェアが扱う情報について、書き換えは発生しません。 ・当該ソフトウェアが完全に停止する可能性があります。 |
| Solution | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| Publication Date | May 27, 2026, midnight |
| Registration Date | June 17, 2026, 3:43 p.m. |
| Last Update | June 17, 2026, 3:43 p.m. |
| CVSS3.0 : 警告 | |
| Score | 5.5 |
|---|---|
| Vector | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| Linux |
| Linux Kernel 3.15 以上 5.10.253 未満 |
| Linux Kernel 5.11 以上 5.15.203 未満 |
| Linux Kernel 5.16 以上 6.6.130 未満 |
| Linux Kernel 6.13 以上 6.18.17 未満 |
| Linux Kernel 6.19 以上 6.19.4 未満 |
| Linux Kernel 6.7 以上 6.12.77 未満 |
| No | Changed Details | Date of change |
|---|---|---|
| 1 | [2026年06月17日] 掲載 |
June 17, 2026, 3:43 p.m. |
| Summary | In the Linux kernel, the following vulnerability has been resolved: ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O When allocating blocks during within-EOF DIO and writeback with Assume we have an unwritten extent, and then DIO writes the second half. [UUUUUUUUUUUUUUUU] on-disk extent U: unwritten extent First, ext4_iomap_alloc() call ext4_map_blocks() with Then, ext4_split_convert_extents() calls ext4_split_extent() with [0000000000SSSSSS] data S: stale data, 0: zeroed Finally, if the DIO failed to write data to the disk, the stale data in Fix this issue by not passing EXT4_GET_BLOCKS_CONVERT when splitting |
|---|---|
| Publication Date | May 27, 2026, 11:17 p.m. |
| Registration Date | May 28, 2026, 4:12 a.m. |
| Last Update | May 27, 2026, 11:48 p.m. |