CVE-2026-43009 in Linux
要約
〜によって VulDB • 2026年05月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
bpf: 原子フェッチの精度追跡に起因する誤ったプルーニングを修正
backtrack_insnがBPF_ATOMICおよびBPF_FETCHフラグを持つBPF_STX命令に遭遇した場合、ソースレジスタ(BPF_CMPXCHGの場合はr0)は宛先としても機能し、メモリ位置から古い値を受け取ります。
現在のバックトラックロジックはこの点を考慮していません。原子フェッチ操作を、ソースレジスタが入力のみとして扱われる通常のストア操作と同じように扱います。これにより、backtrack_insnはスタック位置への精度の伝播に失敗し、その結果、その位置が正確(precise)としてマークされません。
その後、検証プログラムのパスプルーニングにおいて、スタック状態が異なる2つの状態が等価と誤って判断される可能性があります。つまり、本来等価として見なすべきではない2つの分岐が、等価として扱われ、プルーニングされてしまうことがあります。
これを以下のように修正します:backtrack_insnにおけるBPF_LDXの処理を拡張し、is_atomic_fetch_insn()ヘルパー関数を通じて原子フェッチ操作もカバーします。フェッチ先の宛先レジスタが精度追跡されている場合、それをクリアし、精度をスタックスロットへ伝播させます。スタック以外のメモリについては、精度のウォークは原子命令で停止し、通常のBPF_LDXと同じ動作になります。これにより、すべてのフェッチバリエーションがカバーされます。
修正前:
0: (b7) r1 = 8 ; R1=8 1: (7b) *(u64 *)(r10 -8) = r1 ; R1=8 R10=fp0 fp-8=8 2: (b7) r2 = 0 ; R2=0 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) ; R2=8 R10=fp0 fp-8=mmmmmmmm 4: (bf) r3 = r10 ; R3=fp0 R10=fp0 5: (0f) r3 += r2 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r2 stack= before 4: (bf) r3 = r10 mark_precise: frame0: regs=r2 stack= before 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) mark_precise: frame0: regs=r2 stack= before 2: (b7) r2 = 0 6: R2=8 R3=fp8 6: (b7) r0 = 0 ; R0=0 7: (95) exit
修正後:
0: (b7) r1 = 8 ; R1=8 1: (7b) *(u64 *)(r10 -8) = r1 ; R1=8 R10=fp0 fp-8=8 2: (b7) r2 = 0 ; R2=0 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) ; R2=8 R10=fp0 fp-8=mmmmmmmm 4: (bf) r3 = r10 ; R3=fp0 R10=fp0 5: (0f) r3 += r2 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r2 stack= before 4: (bf) r3 = r10 mark_precise: frame0: regs=r2 stack= before 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) mark_precise: frame0: regs=r2 stack=-8 before 2: (b7) r2 = 0 mark_precise: frame0: regs=r1 stack=-8 before 1: (7b) *(u64 *)(r10 -8) = r1 mark_precise: frame0: regs=r1 stack= before 0: (b7) r1 = 8 6: R2=8 R3=fp8 6: (b7) r0 = 0 ; R0=0 7: (95) exit
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.