diff --git a/recipes/firefox.toml b/recipes/firefox.toml index c85157b5..7e2e0c85 100644 --- a/recipes/firefox.toml +++ b/recipes/firefox.toml @@ -334,6 +334,35 @@ if [ "$real" != "$esperado" ]; then exit 1 fi echo "guardián: BuildID = $real (determinista, de SOURCE_DATE_EPOCH)" + +# ── GUARDIÁN: QUE RLBOX ESTÉ EN EL BINARIO, NO SÓLO EN EL CONFIGURE ─────────────────────────── +# Tercera repetición de la misma lección, y por eso nace junto con la bandera en vez de después: +# `--with-wasi-sysroot` es exactamente la clase de opción que el configure acepta sin chistar y +# que puede no llegar al artefacto. Ya pasó dos veces en ESTA receta (`MOZ_REQUIRE_SIGNING` y +# `MOZ_BUILD_DATE`), y acá el fallo sería el más caro de todos: un firefox que dice tener +# enjaulados los parsers de fuentes y medios —el código que come entrada NO confiable de la red— +# y no los tiene. Una promesa falsa de seguridad es peor que no ofrecerla. +# +# QUÉ SE MIRA. RLBox compila esas librerías a wasm y las traduce a C con wasm2c, que deja su +# rastro en los símbolos de `libxul.so`. El discriminante está MEDIDO, no supuesto: sobre el +# artefacto `b3:352d7880` (el último con RLBox APAGADO, 224 MB de libxul) los tres patrones dan +# CERO, así que cualquiera de ellos apareciendo significa que la jaula entró de verdad. +# Se aceptan los tres y no sólo `w2c_` a propósito: el prefijo exacto es un detalle de la versión +# de wasm2c, y un guardián que falla por un cambio de convención de nombres tira 4 h de build por +# algo que no está roto. Lo que NO puede pasar desapercibido es que los tres sigan en cero. +X=/out/usr/lib/firefox/libxul.so +test -f "$X" || { echo "!! no hay libxul.so en el artefacto" >&2; exit 1; } +n_w2c=$(llvm-nm --defined-only "$X" 2>/dev/null | grep -c " w2c_" || true) +n_rlb=$(llvm-nm "$X" 2>/dev/null | grep -ci rlbox || true) +n_w2n=$(llvm-nm "$X" 2>/dev/null | grep -ci wasm2c || true) +if [ $((n_w2c + n_rlb + n_w2n)) -eq 0 ]; then + echo "!! RLBOX NO LLEGÓ AL BINARIO: libxul.so no tiene NI UN símbolo w2c_/rlbox/wasm2c." >&2 + echo " El configure aceptó --with-wasi-sysroot pero el sandbox wasm no se construyó." >&2 + echo " Mirá si las deps wasi-libc / wasi-compiler-rt / wasi-sdk llegaron al sandbox y si" >&2 + echo " /usr/share/wasi-sysroot/lib/wasm32-wasip1/libc.a existe durante el build." >&2 + exit 1 +fi +echo "guardián: RLBox en el binario (w2c_=$n_w2c rlbox=$n_rlb wasm2c=$n_w2n; con RLBox apagado los tres son 0)" ''' [deps]