009: Magisk ship pack through US-S5-1 + US-S4 OpenSSH/Jelly/Gallery2.
Release-keys/AVB, CVE clean+hi batches, Yama/slabrand, Pro branding, bundled apps, and AXP-class product surface docs/scripts.
This commit is contained in:
1 parent
fd793b9471
commit
deaaf42caa
129 files changed
+11769
-141
No files matched your search
@@ -0,0 +1,103 @@
|
||||
# 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](009-fortify-driver-bounds-candidate.patch).
|
||||
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ón `R_AARCH64_CALL26 __read_overflow2`.
|
||||
- `drivers/staging/qcacld-3.0/wlan.lto.o`:
|
||||
`lim_process_fils_auth_frame2+0xe48`,
|
||||
relocación `R_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:
|
||||
|
||||
```text
|
||||
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
|
||||
|
||||
1. 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.
|
||||
2. Validar módulos completos/modpost sin `__read_overflow*`, sin nuevos
|
||||
stubs, sin `__NO_FORTIFY` en estos controladores y sin apagar LTO/CFI.
|
||||
3. Validar el harness de FORTIFY, la config efectiva y el empaquetado antes
|
||||
de entregar un nuevo boot. Mantener combo4 como referencia que arranca.
|
||||
4. 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.
|
||||
Reference in new issue
Block a user