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…
⎇ 1df77985fadaad61c171dabb3508104dd4c93922
docs/evidencia/tasas-kernel-2026-08-29/mnt2.c
Historia
Quién tocó qué
crudo
tasas: T19 — el sandbox apila una capa overlay por dep, y lo caro no es lo que parece
1// mnt2.c — SDD 25 / T19: dónde está el muro de capas del `mount(2)` clásico.
2//
3// Existe porque bisecarlo con el `mount(8)` de util-linux da un muro FALSO: acá se rendía entre 8
4// y 12 capas (1 247 B de opciones) donde el kernel monta 41. bwrap usa `mount(2)`, así que el muro
5// que importa es éste.
6//
7// cc -O2 -o mnt2 mnt2.c -include errno.h
8// sudo ./mnt2 <n> <fichero-con-capas> <dir-base> (dir-base necesita mnt/, upper/ y work/)
9#define _GNU_SOURCE
10#include <sys/mount.h>
11#include <stdio.h>
12#include <stdlib.h>
13#include <string.h>
14#include <unistd.h>
15int main(int argc,char**argv){
16 int n=atoi(argv[1]); const char*lista=argv[2]; const char*base=argv[3];
17 char capa[128][512]; int c=0; char ln[512];
18 FILE*fp=fopen(lista,"r");
19 while(c<128&&fgets(ln,sizeof ln,fp)){size_t l=strlen(ln);while(l&&ln[l-1]=='\n')ln[--l]=0;if(l)snprintf(capa[c++],512,"%s",ln);}
20 fclose(fp);
21 if(n>c){printf("sólo hay %d capas\n",c);return 1;}
22 char o[16384]; int off=snprintf(o,sizeof o,"lowerdir=");
23 for(int i=0;i<n;i++) off+=snprintf(o+off,sizeof o-off,"%s%s",i?":":"",capa[i]);
24 int lowlen=off-9;
25 off+=snprintf(o+off,sizeof o-off,",upperdir=%s/upper,workdir=%s/work",base,base);
26 char m[600]; snprintf(m,sizeof m,"%s/mnt",base);
27 int r=mount("overlay",m,"overlay",0,o);
28 printf("n=%-3d lowerdir=%-5d B opciones=%-5d B -> %s%s\n",n,lowlen,off,r==0?"OK":"FALLA: ",r==0?"":strerror(errno));
29 if(r==0) umount(m);
30 return r==0?0:1;
31}