Un ingeniero de software detalla en su blog personal un mecanismo para verificar de forma fiable que el pseudo-sistema de archivos /proc de Linux está correctamente montado antes de depender de él. La investigación nació al intentar construir un 'vigilante' del sistema de archivos que detectase cualquier cambio capaz de afectar a una ruta: creación, borrado, renombrado, cambios en enlaces simbólicos y, sobre todo, nuevos montajes. La herramienta habitual para esto, inotify(7), cubre la mayoría de los casos pero no los montajes: un watch de inotify sobre /foo/bar no detectaría un nuevo sistema de archivos montado en /foo.
El autor parte de una pregunta clave: ¿qué ocurre si /proc no está disponible? La página de manual de linkat(2) recomienda usar /proc/self/fd/$fd para vincular un fichero anónimo (abierto con O_TMPFILE) a un sistema de archivos, y glibc en ocasiones implementa llamadas al sistema leyendo directamente desde /proc. Muchas aplicaciones asumen, por tanto, su presencia de forma implícita. /proc/self/mounts es pollable y permite conocer los montajes, pero solo funciona si /proc está montado en primer lugar.
Para evitar esa suposición ciega, el autor propone un protocolo de verificación en varios pasos que combina inotify, statfs, statx y poll: 1) establecer un inotify watch sobre '/' que detecte modificaciones en /proc, excluyendo los montajes, y reiniciar la verificación hasta N veces; 2) abrir /proc y conservar el descriptor resultante para que, si después se monta algo encima, siga refiriendo al contenido previo; 3) usar statfs(2) para confirmar que f_type coincide con PROC_SUPER_MAGIC (0x9fa0), lo que garantiza un proc real aunque no descarta un bind mount enraizado en un subdirectorio; 4) comprobar con statx(2) que el número de inodo de /proc es 1, un ancla estable según el autor; 5) abrir /proc/$PID, verificar que no esté montado y usar el descriptor para acceder a /proc/$PID/mounts; 6) activar un poll(2) sobre /proc/$PID/mounts y, ante cualquier cambio, abrir /proc/$PID/mountinfo para confirmar el estado de los puntos de montaje. El resultado es una visión en vivo y coherente del estado de los montajes del proceso, y el autor planea contribuir con soporte de notificaciones de montaje a la crate 'inotify' de Rust, que actualmente carece de esa capacidad.
