CVE-2026-46263
In the Linux kernel, the following vulnerability has been resolved:
drm/amd/display: Fix out-of-bounds stream encoder index v3
eng_id can be negative and that stream_enc_regs[] can be indexed out of bounds.
eng_id is used directly as an index into stream_enc_regs[], which has only 5 entries. When eng_id is 5 (ENGINE_ID_DIGF) or negative, this can access memory past the end of the array.
Add a bounds check using ARRAY_SIZE() before using eng_id as an index. The unsigned cast also rejects negative values.
This avoids out-of-bounds access.
Fixes the below smatch error: dcn*_resource.c: stream_encoder_create() may index stream_enc_regs[eng_id] out of bounds (size 5).
Leer descripción completaMostrar menos
ENGINE_ID_DIGF is 5. should <= be <?
Unrelated but, ugh, why is Smatch saying that "eng_id" can be negative? end_id is type signed long, but there are checks in the caller which prevent it from being negative.
v2: use explicit bounds check as suggested by Roman/Dan; avoid unsigned int cast
Detalles técnicos trazas, registros y código del informe original
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 /* Mapping of VPG, AFMT, DME register blocks to DIO block instance */
1257 if (eng_id <= ENGINE_ID_DIGF) {
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],
^^^^^^^^^^^^^^^^^^^^^^^ This stream_enc_regs[] array has 5 elements so we are one element beyond the end of the array.
...
1287 return &enc1->base;
1288 }
v3: The compiler already knows how to compare the two values, so the
cast (int) is not needed. (Roman)CVSS
- Versión: 3.1
- Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
- Puntuación base: 7.8
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días: 0.18%
- Percentil entre todas las CVEs puntuadas: 6
- Fecha de la puntuación: 5/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
🎯 Técnicas ATT&CK
Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.
- Explotación
T1068Exploitation for Privilege Escalationprivilege escalation75 % - Impacto principal
T1059Command and Scripting Interpreterexecution65 %
Vulnerabilidad local (AV:L, PR:L) que permite acceso fuera de límites a array en memoria del kernel Linux. La explotación requiere privilegios locales. El impacto potencial es ejecución de código arbitrario o corrupción de memoria que podría permitir escalada o ejecución de comandos.
Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.
🛡️ Mitigaciones ATT&CK que cubren estas técnicas
Tecnologías afectadas (1)
CWE
- CWE-125
Referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-46263",
"cveTags": [],
"metrics": {
"cvssMetricV31": [
{
"type": "Secondary",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"cvssData": {
"scope": "UNCHANGED",
"version": "3.1",
"baseScore": 7.8,
"attackVector": "LOCAL",
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"integrityImpact": "HIGH",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"availabilityImpact": "HIGH",
"privilegesRequired": "LOW",
"confidentialityImpact": "HIGH"
},
"impactScore": 5.9,
"exploitabilityScore": 1.8
}
]
},
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "2728e9c7c84235d2d7bc1403174d071ffc82d6d2",
"lessThan": "29f3824b08a98d41ecbbfd33580630d7607f962e",
"versionType": "git"
},
{
"status": "affected",
"version": "2728e9c7c84235d2d7bc1403174d071ffc82d6d2",
"lessThan": "263e28add4f4472cfa95150d218955d1945aa413",
"versionType": "git"
},
{
"status": "affected",
"version": "2728e9c7c84235d2d7bc1403174d071ffc82d6d2",
"lessThan": "ca3808d560ad946ab6d089fd1f5bee04b952ead4",
"versionType": "git"
},
{
"status": "affected",
"version": "2728e9c7c84235d2d7bc1403174d071ffc82d6d2",
"lessThan": "abde491143e4e12eecc41337910aace4e8d59603",
"versionType": "git"
}
],
"programFiles": [
"drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "6.9"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "6.9",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "6.12.75",
"versionType": "semver",
"lessThanOrEqual": "6.12.*"
},
{
"status": "unaffected",
"version": "6.18.14",
"versionType": "semver",
"lessThanOrEqual": "6.18.*"
},
{
"status": "unaffected",
"version": "6.19.4",
"versionType": "semver",
"lessThanOrEqual": "6.19.*"
},
{
"status": "unaffected",
"version": "7.0",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c",
"drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c"
],
"defaultStatus": "affected"
}
]
}
],
"published": "2026-06-03T18:16:27.743",
"references": [
{
"url": "https://git.kernel.org/stable/c/263e28add4f4472cfa95150d218955d1945aa413",
"tags": [
"Patch"
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/29f3824b08a98d41ecbbfd33580630d7607f962e",
"tags": [
"Patch"
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/abde491143e4e12eecc41337910aace4e8d59603",
"tags": [
"Patch"
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/ca3808d560ad946ab6d089fd1f5bee04b952ead4",
"tags": [
"Patch"
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Analyzed",
"weaknesses": [
{
"type": "Primary",
"source": "nvd@nist.gov",
"description": [
{
"lang": "en",
"value": "CWE-125"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/amd/display: Fix out-of-bounds stream encoder index v3\n\neng_id can be negative and that stream_enc_regs[]\ncan be indexed out of bounds.\n\neng_id is used directly as an index into stream_enc_regs[], which has\nonly 5 entries. When eng_id is 5 (ENGINE_ID_DIGF) or negative, this can\naccess memory past the end of the array.\n\nAdd a bounds check using ARRAY_SIZE() before using eng_id as an index.\nThe unsigned cast also rejects negative values.\n\nThis avoids out-of-bounds access.\n\nFixes the below smatch error:\ndcn*_resource.c: stream_encoder_create() may index\nstream_enc_regs[eng_id] out of bounds (size 5).\n\ndrivers/gpu/drm/amd/amdgpu/../display/dc/resource/dcn351/dcn351_resource.c\n 1246 static struct stream_encoder *dcn35_stream_encoder_create(\n 1247 enum engine_id eng_id,\n 1248 struct dc_context *ctx)\n 1249 {\n\n ...\n\n 1255\n 1256 /* Mapping of VPG, AFMT, DME register blocks to DIO block instance */\n 1257 if (eng_id <= ENGINE_ID_DIGF) {\n\nENGINE_ID_DIGF is 5. should <= be <?\n\nUnrelated but, ugh, why is Smatch saying that \"eng_id\" can be negative?\nend_id is type signed long, but there are checks in the caller which prevent it from being negative.\n\n 1258 vpg_inst = eng_id;\n 1259 afmt_inst = eng_id;\n 1260 } else\n 1261 return NULL;\n 1262\n\n ...\n\n 1281\n 1282 dcn35_dio_stream_encoder_construct(enc1, ctx, ctx->dc_bios,\n 1283 eng_id, vpg, afmt,\n--> 1284 &stream_enc_regs[eng_id],\n ^^^^^^^^^^^^^^^^^^^^^^^ This stream_enc_regs[] array has 5 elements so we are one element beyond the end of the array.\n\n ...\n\n 1287 return &enc1->base;\n 1288 }\n\nv2: use explicit bounds check as suggested by Roman/Dan; avoid unsigned int cast\n\nv3: The compiler already knows how to compare the two values, so the\n cast (int) is not needed. (Roman)"
},
{
"lang": "es",
"value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\ndrm/amd/display: Corrección de índice de codificador de flujo fuera de límites v3\n\neng_id puede ser negativo y que stream_enc_regs[]\npuede ser indexado fuera de límites.\n\neng_id se usa directamente como un índice en stream_enc_regs[], que tiene\nsolo 5 entradas. Cuando eng_id es 5 (ENGINE_ID_DIGF) o negativo, esto puede\nacceder a memoria más allá del final del array.\n\nAñadir una comprobación de límites usando ARRAY_SIZE() antes de usar eng_id como un índice.\nLa conversión a tipo sin signo también rechaza valores negativos.\n\nEsto evita el acceso fuera de límites.\n\nCorrige el siguiente error de smatch:\ndcn_resource.c: stream_encoder_create() puede indexar\nstream_enc_regs[eng_id] fuera de límites (tamaño 5).\n\ndrivers/gpu/drm/amd/amdgpu/../display/dc/resource/dcn351/dcn351_resource.c\n 1246 static struct stream_encoder dcn35_stream_encoder_create(\n 1247 enum engine_id eng_id,\n 1248 struct dc_context ctx)\n 1249 {\n\n ...\n\n 1255\n 1256 /* Mapeo de bloques de registro VPG, AFMT, DME a instancia de bloque DIO */\n 1257 if (eng_id <= ENGINE_ID_DIGF) {\n\nENGINE_ID_DIGF es 5. ¿debería <= ser <?\n\nSin relación, pero, ugh, ¿por qué Smatch dice que 'eng_id' puede ser negativo?\nend_id es de tipo signed long, pero hay comprobaciones en la función llamadora que impiden que sea negativo.\n\n 1258 vpg_inst = eng_id;\n 1259 afmt_inst = eng_id;\n 1260 } else\n 1261 return NULL;\n 1262\n\n ...\n\n 1281\n 1282 dcn35_dio_stream_encoder_construct(enc1, ctx, ctx->dc_bios,\n 1283 eng_id, vpg, afmt,\n--> 1284 &stream_enc_regs[eng_id],\n ^^^^^^^^^^^^^^^^^^^^^^^ Este array stream_enc_regs[] tiene 5 elementos, por lo que estamos un elemento más allá del final del array.\n\n ...\n\n 1287 return &enc1->base;\n 1288 }\n\nv2: usar comprobación de límites explícita como sugirieron Roman/Dan; evitar conversión a unsigned int\n\nv3: El compilador ya sabe cómo comparar los dos valores, por lo que la\n conversión (int) no es necesaria. (Roman)"
}
],
"lastModified": "2026-07-22T20:10:00.127",
"configurations": [
{
"nodes": [
{
"negate": false,
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "F8A1C6F6-2847-4C53-ABFC-8F07D96900D2",
"versionEndExcluding": "6.12.75",
"versionStartIncluding": "6.9"
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "BF463CB7-1F58-4607-B847-77ED23E4B9B7",
"versionEndExcluding": "6.18.14",
"versionStartIncluding": "6.13"
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "672A3E79-EC03-479D-8503-361DFBDC8092",
"versionEndExcluding": "6.19.4",
"versionStartIncluding": "6.19"
}
],
"operator": "OR"
}
]
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}