CVE-2026-46263 in Linux
Сводка
по VulDB • 03.06.2026
В ядре Linux устранена следующая уязвимость:
drm/amd/display: исправление выхода за границы индекса кодировщика потока v3
Значение eng_id может быть отрицательным, что приводит к выходу за границы массива stream_enc_regs[].
Значение eng_id используется напрямую в качестве индекса для массива stream_enc_regs[], который содержит только 5 элементов. При значении eng_id равном 5 (ENGINE_ID_DIGF) или отрицательном значении происходит обращение к памяти за пределами массива.
Добавлена проверка границ с использованием макроса ARRAY_SIZE() перед использованием eng_id в качестве индекса. Приведение к беззнаковому типу также отбрасывает отрицательные значения.
Это предотвращает выход за границы массива.
Исправлена следующая ошибка 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 элементов, поэтому мы обращаемся к элементу за пределами массива.
...
1287 return &enc1->base; 1288 }
v2: использовать явную проверку границ, как предложили Roman/Dan; избежать приведения к unsigned int
v3: Компилятор уже умеет сравнивать эти два значения, поэтому приведение (int) не требуется. (Roman)
VulDB is the best source for vulnerability data and more expert information about this specific topic.