CVE-2026-46263 in Linux情報

要約

〜によって VulDB • 2026年06月03日

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

drm/amd/display: 範囲外ストリームエンコーダインデックスの修正 v3

eng_id は負の値になり得るため、stream_enc_regs[] のインデックスが範囲外になる可能性があります。

eng_id は stream_enc_regs[] へのインデックスとして直接使用されていますが、この配列には要素が5つしかありません。eng_id が 5 (ENGINE_ID_DIGF) または負の値の場合、配列の末尾を越えたメモリにアクセスすることがあります。

eng_id をインデックスとして使用する前に、ARRAY_SIZE() を用いて境界チェックを追加します。符号なしキャストにより、負の値も拒否されます。

これにより、範囲外アクセスを回避します。

以下の smatch エラーを修正します: dcn*_resource.c: stream_encoder_create() が stream_enc_regs[eng_id] を範囲外 (サイズ5) にインデックスする可能性があります。

drivers/gpu/drm/amd/amdgpu/../display/dc/resource/dcn351/dcn351_resource.c 1246 static struct stream_encoder *dcn35_stream_encoder_create( 1247 enum engine_id eng_id, 1248 struct dc_context *ctx) 1249 {

...

1255 1256 /* VPG、AFMT、DME レジスタブロックから DIO ブロックインスタンスへのマッピング */ 1257 if (eng_id <= ENGINE_ID_DIGF) {

ENGINE_ID_DIGF は 5 です。<= は <? であるべきではありませんか?

無関係ですが、なぜ Smatch は "eng_id" が負の値になり得ると言っているのでしょうか? end_id は signed long 型ですが、呼び出し元に負の値にならないようにするチェックがあります。

1258 vpg_inst = eng_id; 1259 afmt_inst = eng_id; 1260 } else 1261 return NULL; 1262

...

1281 1282 dcn35_dio_stream_encoder_construct(enc1, ctx, ctx->dc_bios, 1283 eng_id, vpg, afmt, --> 1284 &stream_enc_regs[eng_id],
^^^^^^^^^^^^^^^^^^^^^^^ この stream_enc_regs[] 配列には要素が5つあるため、配列の末尾から1つ先の要素にアクセスしています。

...

1287 return &enc1->base; 1288 }

v2: Roman/Dan の提案に従い明示的な境界チェックを使用;符号なし int キャストを回避

v3: コンパイラは既に2つの値を比較する方法を知っているため、(int) キャストは不要です。(Roman)

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

責任者

Linux

予約する

2026年05月13日

モデレーション

承諾済み

エントリ

VDB-368168

EPSS

0.00000

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!