CVE-2026-45878 in Linux情報

要約

〜によって VulDB • 2026年05月29日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

drm/amdkfd: デバッグアドレスウォッチにおけるwatch_idの境界チェックを修正(v2)

アドレスウォッチクリアコードはwatch_idを符号なし値(u32)として受け取りますが、いくつかのヘルパー関数は符号付きintを使用し、watch_idでシフト演算を行うことでビットをチェックしていました。

ユーザー空間から非常に大きなwatch_idが渡されると、それが負の値に変換される可能性があります。これにより無効なシフトが発生し、watch_points配列の外部のメモリにアクセスする可能性があります。

drm/amdkfd: デバッグアドレスウォッチにおけるwatch_idの境界チェックを修正(v2)

これを修正するため、watch_idを使用する前にwatch_idがMAX_WATCH_ADDRESSESの範囲内であることをチェックします。また、ビットのテストとクリアを安全に行うためにBIT(watch_id)を使用します。

これにより、有効なwatch IDについては動作を変更せず、無効なwatch IDについては未定義動作を回避します。

以下を修正します: drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.c:448 kfd_dbg_trap_clear_dev_address_watch() エラー: バッファオーバーフロー 'pdd->watch_points' 4 <= u32max user_rl='0-3,2147483648-u32max' uncapped

drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.c 433 int kfd_dbg_trap_clear_dev_address_watch(struct kfd_process_device *pdd, 434 uint32_t watch_id) 435 {
436 int r; 437 438 if (!kfd_dbg_owns_dev_watch_id(pdd, watch_id))

kfd_dbg_owns_dev_watch_id()は負の値をチェックしないため、watch_idがINT_MAXより大きいとバッファオーバーフローを引き起こします。 (負のシフトは未定義動作です)。

439 return -EINVAL; 440 441 if (!pdd->dev->kfd->shared_resources.enable_mes) {
442 r = debug_lock_and_unmap(pdd->dev->dqm); 443 if (r) 444 return r; 445 } 446 447 amdgpu_gfx_off_ctrl(pdd->dev->adev, false); --> 448 pdd->watch_points[watch_id] = pdd->dev->kfd2kgd->clear_address_watch(
449 pdd->dev->adev, 450 watch_id);

v2: (Jonathan Kimによる指示に従って) - setパスにwatch_id >= MAX_WATCH_ADDRESSESの早期検証を追加し、clearパスと一致させました。 - kfd_dbg_owns_dev_watch_id()内の冗長な境界チェックを削除しました。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Linux

予約する

2026年05月13日

モデレーション

承諾済み

エントリ

VDB-366078

EPSS

0.00013

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!