Release-keys/AVB, CVE clean+hi batches, Yama/slabrand, Pro branding, bundled apps, and AXP-class product surface docs/scripts.
4.4 KiB
FORTIFY bounds: enlace correcto, arranque fallido
Artefacto remoto: 20260926T223246Z-bisect-ksync-fortify-bounds bajo
/srv/rom/artifacts/009-axp-los23-port/.
El dueño informa logo Google, reinicios y finalmente fastboot. El proceso
de build terminó exit=0 a las 22:32:52 UTC del 26 de septiembre.
Verificaciones realizadas
- Los dos parches de límites están en las fuentes actuales. Audio/WLAN
ya no tienen los símbolos sin resolver
__read_overflow*en sus objetos LTO. Sí usanfortify_panic, que el kernel define y exporta normalmente. lib/string.cno tiene modificaciones/stubs;vmlinuxno contiene los cuatro helpers artificiales de overflow de los intentos anteriores.- El boot descargado tiene SHA-256
ba5ac99eb2873dac4c3c8b108753bb89e5aa7a7d71972361e32b39f6ed9ef136, igual al registro remoto. - Desempaquetado local correcto: Android 16, parche 2026-09, header v2.
El kernel extraído tiene SHA-256
99348e4f21a46c3bf95dde3a97995cd97375a6792427c5d497b3296fa0c0a906, idéntico al kernel nuevo y al kernel verificado en el servidor. - Los ramdisks en los directorios remotos work/check del fallido y combo4 tienen el mismo SHA-256. Se conserva el método ksync.
Error ignorado por el empaquetador
El log muestra que el último magiskboot unpack (línea 91 del script)
terminó con Illegal instruction (core dumped). El || true permitió
continuar y declarar DONE. Es un defecto de verificación que debe corregirse.
No demuestra que la imagen sea inválida: la copia con el mismo hash se ha
desempaquetado correctamente en el portátil y contiene el kernel esperado.
No confundir el fallo de la herramienta host con una traza del teléfono.
Estado de LAB durante esta revisión
ADB disponible como usuario shell, sin privilegios root. LAB ya ejecuta
combo4, kernel #16, sys.boot_completed=1. Pstore vacío. Propiedades de
motivo de arranque: ro.boot.bootreason=reboot, sys.boot.reason=bootloader.
No identifican el fallo previo. El tramo de logcat consultado no contiene
una traza FORTIFY/CFI del intento fallido.
Intentos de leer módulos instalados en vendor devolvieron Permission denied. Por tanto, no se ha podido comparar su ABI/CRC con el kernel fallido. No se ha ejecutado adb root, cambiado Magisk, reiniciado ni flasheado LAB.
Prueba adicional de eficacia de wrappers
Se extrajo el bloque FORTIFY del string.h actual a un harness temporal,
con sus wrappers y macros, tipos auxiliares y libc host. Clang r563880c,
-O2 -flto -fuse-ld=lld. No se añadieron stubs overflow. El handler de
fortify del harness termina con código 77 para observar el rechazo.
Directorio remoto: /tmp/axp-fortify-runtime-9t4hrer_.
13 casos dieron el resultado esperado:
- strlen/strnlen sobre una cadena válida, strcpy válido;
- memcpy, memmove, memset, memcmp y strncpy: tamaño 8 sobre buffers de 8 aceptado, tamaño dinámico 9 rechazado por fortify_panic.
Límites: ejecución host x86_64, no kernel ARM64; no prueba CFI del kernel, wrappers restantes, todos los call sites, módulos ni arranque. El caso memcmp usa el mismo buffer a ambos lados; no es una prueba exhaustiva de comparación. Estas pruebas muestran protección efectiva en los casos probados, no que el port completo sea correcto.
Lo que falta para atribuir el fallo
La corrección de límites resolvió el enlace, que era su alcance probado. No se ha identificado la instrucción que detiene el arranque. Encontrar llamadas a fortify_panic en el binario (incluso en funciones de inicio) es normal y no demuestra que se ejecuten durante el fallo.
Prioridad: preparar una captura de fallo utilizable antes del próximo ensayo. Comprobar en la referencia funcional el acceso y funcionamiento de pstore/ ramoops, incluido el mecanismo del dispositivo que procesa sus registros. Un arranque de diagnóstico puede instrumentar fortify_panic para registrar caller/backtrace conservando su comportamiento de fallo; también debe poder distinguir una caída CFI, un watchdog y un fallo de módulos. Esa instrumentación sin un canal persistente/serial verificado no garantiza obtener evidencia.
Conservar combo4 como referencia aceptada. No habilitar FORTIFY para ship, ni atribuir el fallo a un controlador concreto, ni reintroducir stubs/no-ops a partir del solo síntoma del logo. Revisar después compatibilidad de módulos y los call sites identificados por una traza real.
Plan de captura (siguiente documento): docs/009-fortify-diag-capture-plan.md.