Restore disable_configstore, EuiccDisabler and thermal CDEV guards, branding and rebuild/sync helpers; document device roles, laptop migration, and Gitea. Co-authored-by: Cursor <cursoragent@cursor.com>
5.1 KiB
Status: historical. Do not use as execution order. Resume:
009-handoff-20261008.md.
FORTIFY POS0: dos errores localizados y corrección candidata
Revisión del job 009-bisect-ksync-fortify-pos0, que terminó con exit=1
el 2026-09-26 a las 21:54:28 UTC. Se leyó el log del servidor, el fragmento
aportado y la conversación reciente de Cursor de este proyecto.
Resultado
Se reprodujeron los dos símbolos sin resolver en compilaciones aisladas de los archivos responsables, usando los argumentos del build fallido y su Clang 21. Añadiendo validaciones explícitas de capacidad, desaparecen ambos en los objetos tras LTO, sin stubs y sin desactivar FORTIFY.
Parche candidato.
Es un cambio local propuesto en esta revisión, no un parche upstream.
No se ha aplicado al árbol de compilación de Cursor. git apply --check
contra el árbol remoto actual terminó correctamente.
Localización en los objetos reales del build fallido
Raíz: /srv/rom/src/lineage/out/target/product/sunfish/obj/KERNEL_OBJ.
techpack/audio/dsp/q6_dlkm.lto.o:rtac_remove_voice+0x1d0, relocaciónR_AARCH64_CALL26 __read_overflow2.drivers/staging/qcacld-3.0/wlan.lto.o:lim_process_fils_auth_frame2+0xe48, relocaciónR_AARCH64_CALL26 __read_overflow.
Importante: modpost etiqueta el error con .lto.ko, pero los objetos
intermedios disponibles son .lto.o. Los .ko antiguos que quedan en out
no deben confundirse con módulos del intento fallido.
Audio
techpack/audio/dsp/rtac.c tiene capacidad para dos entradas de voz.
rtac_remove_voice usa un contador global para recorrer el array y llama a
shift_voice_devices, que copia del elemento idx+1. El código de alta
ya limita el número de entradas, pero ese invariante no basta para eliminar
la rama de diagnóstico en esta compilación.
El candidato valida el contador bajo rtac_voice_mutex, antes del recorrido.
Si supera ARRAY_SIZE(voice), registra el error, libera el mutex y retorna.
Esto evita aceptar el estado inválido; no altera el recorrido válido ni
desactiva las comprobaciones de memoria.
Wi-Fi
lim_process_fils.c:1095 recorre dot11f_ie_rsn.pmkid_count y compara
PMKID de 16 bytes. El array declarado en dot11f.h:6725 es pmkid[4][16].
El objeto LTO conserva una rama al helper de overflow cuando el contador
alcanza cinco o más sin haberse encontrado una coincidencia.
El parser dot11f.c:6703 ya rechaza contadores mayores de cuatro. Por tanto,
esta revisión no demuestra que exista una entrada explotable ni una lectura
real fuera de límites. El compilador no elimina todas las ramas inválidas
en el consumidor. El candidato comprueba ARRAY_SIZE(pmkid) justo antes del
bucle y devuelve false ante un contador inválido.
Validación realizada
Se trabajó en directorios temporales de rom-dev01, sin cambiar las fuentes ni los objetos de salida usados por Cursor:
/tmp/axp-fortify-probe-bl9zsxpt: reproducción de ambos archivos y prueba Wi-Fi; contiene también una variante preliminar de audio no elegida./tmp/axp-fortify-probe-kkcpn4o9: reproducción y candidato final de audio.
Método: leer la orden original de .rtac.o.cmd / .lim_process_fils.o.cmd,
conservar sus opciones de Clang/LTO/CFI e includes; cambiar únicamente la
fuente/output a copias temporales, evitar generar dependencias en out y
añadir el directorio original para resolver includes locales. Ejecutar
ld.lld -m aarch64linux -O2 -r sobre cada objeto bitcode y consultar
símbolos sin resolver con llvm-nm.
Resultados:
audio baseline: U __read_overflow2
audio con validación del contador: ningún símbolo overflow sin resolver
wifi baseline: U __read_overflow
wifi con validación del contador: ningún símbolo overflow sin resolver
Alcance: son dos unidades de compilación y su enlace LTO aislado. No se ha repetido el enlace completo de q6_dlkm/wlan, modpost global, ROM o boot. No se han probado arranque, llamadas de voz, audio ni Wi-Fi en LAB. Tampoco se sustituye con esto el harness pendiente de eficacia de los wrappers.
Reanudación para Cursor
- Conservar la evidencia del intento fallido y revisar/aplicar el candidato después del reset y del port FORTIFY en la receta reproducible. El script ksync resetea las fuentes: una edición manual previa se perdería.
- Validar módulos completos/modpost sin
__read_overflow*, sin nuevos stubs, sin__NO_FORTIFYen estos controladores y sin apagar LTO/CFI. - Validar el harness de FORTIFY, la config efectiva y el empaquetado antes de entregar un nuevo boot. Mantener combo4 como referencia que arranca.
- Tras aceptar FORTIFY aislado, probar combo4+FORTIFY y funciones de hardware.
La conversación de Cursor proponía mirar los call sites o una exclusión
puntual con __NO_FORTIFY. Ya hay evidencia para intentar primero estas
validaciones de límites. Las advertencias de versionado de símbolos WLAN
son un asunto adicional; esta corrección no afirma resolverlas.