gioser

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 1574Shell 204Rust 111Markdown 993763 Definiciones

⎇ 1df77985fadaad61c171dabb3508104dd4c93922 docs/evidencia/tasas-kernel-2026-08-29/mnt2.c C · 31 líneas · 1.4 KB Historia Quién tocó qué crudo

tasas: T19 — el sandbox apila una capa overlay por dep, y lo caro no es lo que parece 1df77985f · Sergio ·

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}