Release-keys/AVB, CVE clean+hi batches, Yama/slabrand, Pro branding, bundled apps, and AXP-class product surface docs/scripts.
90 lines
4.5 KiB
Markdown
90 lines
4.5 KiB
Markdown
# Revisión del port FORTIFY en curso — 2026-09-26, 21:25 UTC
|
|
|
|
Revisión de solo lectura del servidor; no se han editado scripts en ejecución.
|
|
El dueño confirma combo4 arrancado. Cursor registra kernel #16, DMESG,
|
|
SLAB_FREELIST_HARDENED, INIT_ON_ALLOC y INIT_ON_FREE activos, FORTIFY apagado.
|
|
No se ha repetido aquí la inspección de LAB.
|
|
|
|
## Estado real
|
|
|
|
Job: `009-bisect-ksync-fortify-clang`, iniciado a las 21:15:03 UTC.
|
|
Log: `/srv/rom/artifacts/detach-009-bisect-ksync-fortify-clang-20260926T211503Z.log`.
|
|
A las 21:25 UTC seguía activo, con procesos clang consumiendo CPU. El log
|
|
principal no se actualizaba desde las 21:18:39; eso no implicaba bloqueo.
|
|
No había resultado final ni nuevo artefacto FORTIFY validado.
|
|
|
|
El script recibe **solo CONFIG_FORTIFY_SOURCE**. Es un ensayo aislado, no
|
|
combo4+FORTIFY; coincide con el plan local. Preserva breakfast/bp4a y el
|
|
empaquetado sobre GOODMAKE. El diff actual no modifica lib/string.c ni añade
|
|
los stubs BUG. Mantener deshabilitado ALLOW_FORTIFY_BUG_STUBS.
|
|
|
|
## Hallazgo que revisar antes de aceptar el port
|
|
|
|
El script `apply_fortify_clang.py` adapta atributos y prototipos, pero deja
|
|
consultas de tamaño incoherentes con algunos atributos:
|
|
|
|
- POS equivale a `pass_object_size(1)`.
|
|
- `strlen` y `strnlen` reciben p con POS y consultan
|
|
`__builtin_object_size(p, 0)`.
|
|
- `strlcpy`, `strncat` y `strcpy` reciben q con POS y consultan su tamaño
|
|
con tipo 0. En otros wrappers, POS0 sí coincide con las consultas tipo 0.
|
|
|
|
Esto no es un detalle estético. La información de tamaño implícita depende
|
|
del tipo. Se compiló por stdin una prueba pequeña con el mismo Clang
|
|
r563880c, también para AArch64 freestanding, sin escribir en el servidor:
|
|
|
|
```c
|
|
typedef __SIZE_TYPE__ size_t;
|
|
__attribute__((noinline))
|
|
size_t mismatch(const char *const p __attribute__((pass_object_size(1)))) {
|
|
return __builtin_object_size(p, 0);
|
|
}
|
|
__attribute__((noinline))
|
|
size_t matched(const char *const p __attribute__((pass_object_size(0)))) {
|
|
return __builtin_object_size(p, 0);
|
|
}
|
|
```
|
|
|
|
El IR optimizado de mismatch devuelve -1 (tamaño desconocido); matched
|
|
devuelve el argumento implícito de tamaño. **Límite:** es una prueba aislada
|
|
noinline del mecanismo, no una demostración de que todas las llamadas a los
|
|
wrappers always_inline reales pierdan protección. Es necesario probar los
|
|
wrappers reales con optimización/LTO, tamaños conocidos y desconocidos.
|
|
|
|
Referencia primaria:
|
|
[Clang: pass_object_size](https://clang.llvm.org/docs/AttributeReference.html#pass-object-size-pass-dynamic-object-size).
|
|
|
|
Adaptar coherentemente los atributos y la semántica de tamaño del 4.14;
|
|
no sustituir todas las consultas por tipo 1 a ciegas, porque cambia la
|
|
política whole-object/subobject y puede alterar accesos válidos del árbol.
|
|
|
|
## Otros puntos de aceptación pendientes
|
|
|
|
- El port elimina `depends on !CC_IS_CLANG` sin implementar la detección y
|
|
los límites de versión/capacidades que propone su propio plan. Los macros
|
|
de atributos tienen fallback vacío: un compilador no compatible puede
|
|
volver a habilitar un FORTIFY sin soporte. No es prueba de fallo de Clang 21,
|
|
pero la configuración aún no tiene una protección adecuada.
|
|
- `__diagnose_as` está definido pero no utilizado en los wrappers revisados.
|
|
Documentar si se omite intencionadamente y validar diagnósticos reales;
|
|
declarar el atributo no implementa su efecto.
|
|
- El empaquetador imprime propiedades/config pero varias comprobaciones
|
|
terminan en `|| true`. Mostrar el valor no garantiza que coincida con el
|
|
esperado. Antes de entregar: comparar hashes de ramdisk/DTB, metadatos,
|
|
kernel inyectado y opciones de la config embebida, fallando si difieren.
|
|
- No editar el script activo. Congelar copia, hash, argumentos, diff y
|
|
configuración por experimento para evitar repetir el incidente combo4.
|
|
|
|
## Qué debe probarse además de compilar y arrancar
|
|
|
|
Sin stubs es necesario, pero no suficiente: quitar accidentalmente una
|
|
comprobación también puede hacer desaparecer símbolos de overflow.
|
|
Usar casos válidos y desbordamientos intencionados en un harness aislado
|
|
de los wrappers reales (no provocar corrupción en LAB), comprobando el
|
|
diagnóstico o camino de fallo esperado con Clang/LTO. Verificar también
|
|
ausencia de stubs en binarios/módulos, .config efectiva y hardware básico.
|
|
Después del ensayo aislado, validar combo4+FORTIFY como artefacto distinto.
|
|
|
|
Conclusión: el enfoque mejora y el build está activo; aún hay detalles del
|
|
port y pruebas de eficacia pendientes. No equivale a un port ya aceptado.
|