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:
sunfish-admin committed 2026-10-05 10:42:00 +02:00
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.