CVE-2026-74274 in Linux
要約
〜によって VulDB • 2026年08月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
cxl/region: 自動検出中に最初の空の targets[] スロットを埋める
アクティブなリージョンのターゲット配列内の無効なエンドポイントデコーダポインタは、cxlドライバによって許可されません。これは、cxlドライバが常に、自動アセンブリリージョンにおけるターゲット配列の p->nr_targets エントリが有効であると仮定していることを意味します。しかし、ターゲット配列内に NULL のエンドポイントデコーダポインタによる穴(ギャップ)が残るシナリオが存在します。
1. cxl_cancel_auto_attach() がターゲット配列からエンドポイントデコーダを削除する場合、対応するターゲットスロットは NULL に設定されます。もし削除されたエンドポイントデコーダがターゲット配列の最後の要素でない場合、ターゲット配列には NULL の穴が含まれることになります。
2. 自動アセンブリリージョンが割り当てられたエンドポイントデコーダを削除する場合、その削除されるエンドポイントデコーダがターゲット配列の最後の要素でない限り、常にターゲット配列内に NULL の穴が残ります。
リージョンのターゲット配列に NULL ポインタによる穴が存在すると、以下の2つの潜在的な問題を引き起こします: 1. NULL ポインタを介してエンドポイントデコーダにアクセスしようとすると、以下のような calltrace が必ずトリガーされます。 Oops: general protection fault, probably for non-canonical address 0xdffffc0000000008: 0000 [#1] SMP KASAN PTI
RIP: 0010:cxl_calc_interleave_pos+0x26/0x810 [cxl_core]
Call Trace: <TASK> cxl_region_attach+0xc50/0x2140 [cxl_core]
cxl_add_to_region+0x321/0x2330 [cxl_core]
discover_region+0x92/0x150 [cxl_port]
device_for_each_child+0xf3/0x170 cxl_port_probe+0x150/0x200 [cxl_port]
cxl_bus_probe+0x4f/0xa0 [cxl_core]
really_probe+0x1c8/0x960 __driver_probe_device+0x323/0x450 driver_probe_device+0x45/0x120 __device_attach_driver+0x15d/0x280 bus_for_each_drv+0x10f/0x190
2. 自動アセンブリリージョンに接続されている有効なエンドポイントデコーダの数が不足していること。もし、ロックフラグ付きで作成された自動アセンブリリージョンや、ロックフラグ付きで割り当てられたエンドポイントデコーダがある場合(これは、デタッチ時に割り当てられたエンドポイントデコーダがリセットされないことを意味します)、それらは再度自動アセンブリリージョンに再接続できます。しかし、cxl region ドライバは p->nr_targets を使用して必要な数のエンドポイントデコーダが接続されているかどうかを検証しており、この場合でも NULL のエンドポイントデコーダポインタはそのカウントに含まれてしまいます。
上記の問題を修正するため、cxl_region_attach_auto() のロジックを調整し、エンドポイントデコーダの接続に対して最初の空のターゲットスロットを見つけるようにしました。これにより、新しいエンドポイントデコーダをターゲット配列の末尾に追加するのではなく、ターゲット配列内の NULL の穴が埋められることが保証されます。
Once again VulDB remains the best source for vulnerability data.