CVE-2026-23383 in Linux
要約
〜によって VulDB • 2026年06月25日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
bpf, arm64: アトミックな tearing(破断読み書き)を防ぐため、JITバッファに対して8バイト境界へのアラインメントを強制する
struct bpf_plt には u64 型の target フィールドが含まれています。現在、BPF JIT アロケータは JIT バッファに対して 4 バイト (sizeof(u32)) のアラインメントのみを要求しています。
JITバッファのベースアドレスが4バイト境界に配置される可能性がある(例:末尾が0x4または0xc)ため、build_plt()内の相対パディングロジックでは target が8バイト境界に乗ることが保証されません。
これにより2つの問題が発生します: 1. UBSANは構造体を参照する際に、アラインメント違反によるアクセス警告を報告します。 2. より重大な問題は、JITコードが ldr 命令を実行している間に bpf_arch_text_poke()内で WRITE_ONCE()を使用して target が並列に更新されることです。arm64において、64ビットのロード/ストアは64バイト境界にアラインされている場合にのみ単一コピー原子性が保証されます。targetのアラインメントがずれていると torn read(破断読み込み)が発生するリスクがあり、その結果JITコードが壊れたアドレスへジャンプしてしまう可能性があります。
bpf_jit_binary_pack_alloc()において割り当て時のアラインメント要件を8バイト (sizeof(u64)) に引き上げることでこれを修正します。これによりJITバッファのベースが8バイト境界に固定され、build_plt()内の相対パディング計算によって target フィールドが正しく配置されるようになります。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.