tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1182Shell 87Rust 63Markdown 541592 Definitions

arneses: los CINCO sandboxes de Gecko apagados, no un subconjunto a ojo

Cada arnés headless tenía su propio subconjunto de MOZ_DISABLE_*_SANDBOX, elegido en su
momento sin medir: banco 1 de 5, perfilar 4, codecs 3, ruteo 3, nativo 2, inicio 2. Con
cualquier subconjunto incompleto el sandbox de Firefox sigue intentando montar su
user-namespace dentro del de bwrap, falla con 'uid_map: EPERM' y deja un ayudante
'Sandbox Forked' muerto de SIGSEGV por cada intento — en el 100% de las corridas, después
de escribir el PNG y por eso invisible.

Medido: 2 cadáveres por corrida con sólo CONTENT apagado, 0 con los cinco. Verificado sobre
el arnés ya editado: segv=0 EPERM=0 screenshot=sí.

Acá no se pierde seguridad: bwrap ya es la jaula, el sandbox de Gecko es redundante y lo
único que hace dentro es fallar.

⚠ Cambia las condiciones de medición del banco de PGO: las cifras de docs/26 se tomaron con
el arnés viejo. Los cocientes del PGO comparan dos firefox bajo el mismo arnés y deberían
aguantar; la línea base absoluta de arranque no tiene por qué. Anotado en la cabecera.

No se tocan scripts/wlr/dunst-headless.sh (otro agente trabajando en él) ni los cazadores,
que conservan el entorno viejo a propósito para poder reproducir la condición original.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2

b221f06c0154625c8551947a30dc41f17f0f808a · by Sergio · (1 month ago) · parent 846f2ec5a · browse the tree at this commit

Semantic delta · 3

scripts/test-atuq-inicio.py

  • body changed fn main

scripts/test-atuq-nativo.py

  • body changed fn main

scripts/test-atuq-ruteo.py

6 files · +30 −3

diff --git a/scripts/diagnostico/banco-pgo-final.sh b/scripts/diagnostico/banco-pgo-final.sh
index 2fc3782e..aa2711d0 100755
--- a/scripts/diagnostico/banco-pgo-final.sh
+++ b/scripts/diagnostico/banco-pgo-final.sh
@@ -7,6 +7,18 @@
 #   fuera-del-corpus → DOM/layout: parentesco con lo que entrena el corpus
 #   del-corpus       → SunSpider 3d-raytrace: JIT-bound
 #   ajena            → imágenes, canvas, JSON, DOM por API: SIN parentesco
+#
+# ⚠ 2026-09-08: este arnés apaga LOS CINCO sandboxes de Gecko, no sólo el de contenido. Antes dejaba
+#   2 ayudantes 'Sandbox Forked' muertos de SIGSEGV en CADA corrida —el sandbox de Firefox no puede
+#   montar su user-namespace dentro del de bwrap y muere en la salida de error—. Acá no se pierde
+#   nada de seguridad: bwrap YA es la jaula. Ver scripts/diagnostico/cazar-cuelgue-headless.sh.
+#
+#   Y CAMBIA LAS CONDICIONES DE MEDICIÓN: las cifras publicadas en docs/26 se tomaron con el arnés
+#   viejo, o sea con esos 2 procesos reventando por corrida. Los porcentajes del PGO comparan dos
+#   firefox bajo el MISMO arnés, así que el cociente debería aguantar; el nivel absoluto de la línea
+#   base de arranque (~16 s) no tiene por qué. Si se vuelve a publicar un número, re-medir la línea
+#   base con este arnés y no reutilizar la vieja.
+#
 set -u
 RAIZ=/mnt/vvv/hammer; R=$RAIZ/store/.rootfs/sway-v2
 AQUI=$(cd "$(dirname "$0")" && pwd)   # las 4 páginas viven junto a este script
@@ -19,7 +31,7 @@ corre(){ local ini fin
     --ro-bind "$1/usr/lib/firefox" /usr/lib/firefox --dev /dev --proc /proc --tmpfs /run --tmpfs /tmp \
     --unshare-pid --ro-bind "$AQUI" /bench --bind "$SAL" /salida --unshare-user --uid 0 --gid 0 \
     --setenv PATH /usr/bin:/bin \
-    /bin/sh -c 'export HOME=/tmp/h MOZ_HEADLESS=1 MOZ_DISABLE_CONTENT_SANDBOX=1 LIBGL_ALWAYS_SOFTWARE=1 LANG=C.UTF-8; mkdir -p $HOME
+    /bin/sh -c 'export HOME=/tmp/h MOZ_HEADLESS=1 LIBGL_ALWAYS_SOFTWARE=1 MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 MOZ_DISABLE_UTILITY_SANDBOX=1  LANG=C.UTF-8; mkdir -p $HOME
       LD_LIBRARY_PATH=/usr/lib/firefox /usr/lib/firefox/firefox --headless --screenshot /salida/b.png file:///bench/'"$2" \
     >/dev/null 2>&1
   fin=$(date +%s%N); echo $(( (fin-ini)/1000000 )); }
diff --git a/scripts/pgo-corpus/perfilar.sh b/scripts/pgo-corpus/perfilar.sh
index b9ff162e..93ccab99 100755
--- a/scripts/pgo-corpus/perfilar.sh
+++ b/scripts/pgo-corpus/perfilar.sh
@@ -23,7 +23,11 @@
 set -u
 export HOME=/tmp/home; mkdir -p "$HOME"
 export LANG=C.UTF-8 MOZ_HEADLESS=1 LIBGL_ALWAYS_SOFTWARE=1
-export MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1
+# Los CINCO sandboxes de Gecko apagados, no cuatro: el sandbox propio de Gecko no puede montar su user-namespace dentro de bwrap
+# (uid_map: EPERM) y CADA intento fallido deja un ayudante 'Sandbox Forked' muerto de SIGSEGV.
+# Medido 2026-09-08: 2 cadáveres por corrida con sólo CONTENT apagado, 0 con los cinco. Acá no
+# se pierde nada: bwrap YA es la jaula. Ver scripts/diagnostico/cazar-cuelgue-headless.sh.
+export MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 MOZ_DISABLE_UTILITY_SANDBOX=1
 export LLVM_PROFILE_FILE=/salida/ff-%p-%m.profraw
 
 MARCA="pgo-$$-$(cat /proc/sys/kernel/random/uuid 2>/dev/null || echo ${RANDOM:-0}${RANDOM:-0})"
diff --git a/scripts/test-atuq-codecs.sh b/scripts/test-atuq-codecs.sh
index c03f410f..f802e284 100755
--- a/scripts/test-atuq-codecs.sh
+++ b/scripts/test-atuq-codecs.sh
@@ -119,7 +119,10 @@ bwrap --overlay-src "$ALPINE" --overlay-src "$RFS" --tmp-overlay / \
   --bind "$TMP" /salida --uid 0 --gid 0 \
   --setenv PATH /usr/bin:/bin --setenv LD_LIBRARY_PATH "$LDP" \
   --setenv HOME /root --setenv XDG_RUNTIME_DIR /run --setenv MOZ_HEADLESS 1 \
-  --setenv MOZ_DISABLE_CONTENT_SANDBOX 1 --setenv MOZ_DISABLE_RDD_SANDBOX 1 \
+  --setenv MOZ_DISABLE_CONTENT_SANDBOX 1 \
+  --setenv MOZ_DISABLE_GMP_SANDBOX 1 \
+  --setenv MOZ_DISABLE_RDD_SANDBOX 1 \
+  --setenv MOZ_DISABLE_SOCKET_PROCESS_SANDBOX 1 \
   --setenv MOZ_DISABLE_UTILITY_SANDBOX 1 \
   sh -c "mkdir -p /root; timeout 90 $BIN --no-remote --headless --profile /salida/perfil \
          file:///salida/matriz.html > /salida/atuq.log 2>&1; true"
diff --git a/scripts/test-atuq-inicio.py b/scripts/test-atuq-inicio.py
index d16662ca..013f49d1 100644
--- a/scripts/test-atuq-inicio.py
+++ b/scripts/test-atuq-inicio.py
@@ -141,7 +141,10 @@ def main():
             "--setenv", "XDG_RUNTIME_DIR", "/run", "--setenv", "HOME", "/root",
             "--setenv", "XDG_DATA_DIRS", "/usr/share", "--setenv", "MOZ_HEADLESS", "1",
             "--setenv", "MOZ_DISABLE_CONTENT_SANDBOX", "1",
+            "--setenv", "MOZ_DISABLE_GMP_SANDBOX", "1",
             "--setenv", "MOZ_DISABLE_RDD_SANDBOX", "1",
+            "--setenv", "MOZ_DISABLE_SOCKET_PROCESS_SANDBOX", "1",
+            "--setenv", "MOZ_DISABLE_UTILITY_SANDBOX", "1",
             "sh", "-c", guion,
         ], check=False)
 
diff --git a/scripts/test-atuq-nativo.py b/scripts/test-atuq-nativo.py
index 12b4a165..8d56e66d 100644
--- a/scripts/test-atuq-nativo.py
+++ b/scripts/test-atuq-nativo.py
@@ -180,7 +180,10 @@ def main():
             # de contenido de Gecko no arranca y cada proceso hijo muere en bucle. Acá se mide el
             # camino nativo, no el sandbox del motor.
             "--setenv", "MOZ_DISABLE_CONTENT_SANDBOX", "1",
+            "--setenv", "MOZ_DISABLE_GMP_SANDBOX", "1",
             "--setenv", "MOZ_DISABLE_RDD_SANDBOX", "1",
+            "--setenv", "MOZ_DISABLE_SOCKET_PROCESS_SANDBOX", "1",
+            "--setenv", "MOZ_DISABLE_UTILITY_SANDBOX", "1",
             "sh", "-c", guion,
         ], check=False)
 
diff --git a/scripts/test-atuq-ruteo.py b/scripts/test-atuq-ruteo.py
index 185e18d5..ca6f7e54 100755
--- a/scripts/test-atuq-ruteo.py
+++ b/scripts/test-atuq-ruteo.py
@@ -185,6 +185,8 @@ def correr(tmp, atuq, segundos):
         "--setenv", "MOZ_DISABLE_CONTENT_SANDBOX", "1",
         "--setenv", "MOZ_DISABLE_GMP_SANDBOX", "1",
         "--setenv", "MOZ_DISABLE_RDD_SANDBOX", "1",
+        "--setenv", "MOZ_DISABLE_SOCKET_PROCESS_SANDBOX", "1",
+        "--setenv", "MOZ_DISABLE_UTILITY_SANDBOX", "1",
         "sh", "-c", guion,
     ]
     subprocess.run(cmd, check=False)