Cadena de invocación
En Linux, los permisos de ejecución (incluyendo el privilegio de root cuando un programa se lanza con sudo) no se evalúan por binario individual en una cadena de subprocesos, sino por proceso y sus descendientes.
[ci-runLauncher.sh] (Host / Workstation)
│
▼ SSH / Remote Execution
[ci-kmod-runner.sh] (Sandbox - Usuario 'builder' / no root)
│
├── 1. Evalúa $TEST_BINARY_NAME ("hwbus_io_suite00r")
├── 2. Detecta la 'r' final (``*r``)
│
▼ Invoca mediante: sudo ./hwbus_io_suite00r
┌──────────────────────────────────────────────────────────┐
│ Proceso PID X: [hwbus_io_suite00r] │
│ EUID: 0 (root) | EGID: 0 (root) │
│ │
│ 1. Inicia suite, setup(), tst_module_load() │
│ 2. Llama a SAFE_FORK() -> Crea subproceso hijo │
│ 3. Llama a execv("./hwbus_io01", argv) │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Proceso Hijo (PID X+1): [hwbus_io01] │ │
│ │ EUID: 0 (root) | EGID: 0 (root) <--- [HEREDADO] │ │
│ │ │ │
│ │ Executa llamados ioctl(), mmap(), etc. como ROOT │ │
│ │ Finaliza con exit(0) │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ 4. Parent recibe status vía waitpid(PID X+1, ...) │
│ 5. Siguiente iteración -> repite SAFE_FORK + execv ... │
└──────────────────────────────────────────────────────────┘