製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける初期化されていないリソースの使用に関する脆弱性
Title LinuxのLinux Kernelにおける初期化されていないリソースの使用に関する脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました。hfsplusのカタログレコードサイズの検証を強化し、未初期化値の問題に対処しました。Syzbotはhfsplus_strcasecmp()内でKMSAN未初期化値の問題を報告しました。根本原因は、hfs_brec_read()がオンディスクのレコードサイズと読み取ろうとしているレコードタイプの想定サイズが一致しているかを検証していなかったことにあります。破損したファイルシステムをマウントする際、hfs_brec_read()は期待よりも少ないデータを読み取る場合がありました。例えば、カタログスレッドレコードを読むとき、デバッグ出力は次のように示されました: HFSPLUS_BREC_READ: rec_len=520, fd-entrylength=26 HFSPLUS_BREC_READ: WARNING - entrylength (26) rec_len (520) - PARTIAL READ! hfs_brec_read()はentrylengthがバッファサイズを超えていないことのみ検証し、期待値より小さいかはチェックしていませんでした。その結果、520バイトの構造体に26バイトのみを正常に読み込み成功を返し、494バイトが未初期化のまま残りました。このtmp.thread.nodeName内の未初期化データはhfsplus_cat_build_key_uni()でコピーされ、hfsplus_strcasecmp()で使用されました。これにより、case_fold()内で未初期化バイトが配列インデックスとして使用された際にKMSAN警告が発生しました。修正ではhfsplus_brec_read_cat()ラッパーを導入し、1. hfs_brec_read()を呼び出してデータを読み込む 2. typeフィールドに基づきレコードサイズを検証(フォルダ・ファイルレコードは固定サイズ、スレッドレコードは文字列長に依存する可変サイズ) 3. サイズが期待と異なる場合は-EIOを返す、という手順を実装しました。スレッドレコードについては、nodeName.lengthを読む前にHFSPLUS_MIN_THREAD_SZと照合し、entry構造体をゼロ初期化していない呼び出し箇所での未初期化データ読み取りを回避しました。また、防御的プログラミングとしてhfsplus_find_cat()内のtmp変数も初期化し、検証がバイパスされた場合でも未初期化データが残らないようにしています。

Possible impacts ・当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 ・当該ソフトウェアが扱う情報について、書き換えは発生しません。 ・当該ソフトウェアが完全に停止する可能性があります。 
Solution

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

Publication Date May 28, 2026, midnight
Registration Date June 12, 2026, 2:49 p.m.
Last Update June 12, 2026, 2:49 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
Affected System
Linux
Linux Kernel 2.6.12
Linux Kernel 2.6.12.1 以上 6.6.140 未満
Linux Kernel 6.13 以上 6.18.30 未満
Linux Kernel 6.19 以上 7.0.7 未満
Linux Kernel 6.7 以上 6.12.88 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年06月12日]
  掲載
June 12, 2026, 2:49 p.m.

NVD Vulnerability Information
CVE-2026-46169
Summary

In the Linux kernel, the following vulnerability has been resolved:

hfsplus: fix uninit-value by validating catalog record size

Syzbot reported a KMSAN uninit-value issue in hfsplus_strcasecmp(). The
root cause is that hfs_brec_read() doesn't validate that the on-disk
record size matches the expected size for the record type being read.

When mounting a corrupted filesystem, hfs_brec_read() may read less data
than expected. For example, when reading a catalog thread record, the
debug output showed:

HFSPLUS_BREC_READ: rec_len=520, fd->entrylength=26
HFSPLUS_BREC_READ: WARNING - entrylength (26) < rec_len (520) - PARTIAL READ!

hfs_brec_read() only validates that entrylength is not greater than the
buffer size, but doesn't check if it's less than expected. It successfully
reads 26 bytes into a 520-byte structure and returns success, leaving 494
bytes uninitialized.

This uninitialized data in tmp.thread.nodeName then gets copied by
hfsplus_cat_build_key_uni() and used by hfsplus_strcasecmp(), triggering
the KMSAN warning when the uninitialized bytes are used as array indices
in case_fold().

Fix by introducing hfsplus_brec_read_cat() wrapper that:
1. Calls hfs_brec_read() to read the data
2. Validates the record size based on the type field:
- Fixed size for folder and file records
- Variable size for thread records (depends on string length)
3. Returns -EIO if size doesn't match expected

For thread records, check against HFSPLUS_MIN_THREAD_SZ before reading
nodeName.length to avoid reading uninitialized data at call sites that
don't zero-initialize the entry structure.

Also initialize the tmp variable in hfsplus_find_cat() as defensive
programming to ensure no uninitialized data even if validation is
bypassed.

Publication Date May 28, 2026, 7:16 p.m.
Registration Date May 29, 2026, 4:13 a.m.
Last Update May 28, 2026, 10:44 p.m.
Related information, measures and tools
Common Vulnerabilities List