Files
sergioandClaude Opus 4.8 cba59e829b harkaq: la granja VPS ya puede ser el compilador continuo — golden bumpeada a 6.17 (ABI 7)
El VPS va a ser el compilador permanente ⇒ harkaq TIENE que correr ahí o el
frente queda como decoración de laptop. Verificado de punta a punta en un worker
efímero desde la golden, no en el papel:

  antes:   kernel 6.8.0-134  →  Landlock ABI 4  →  sin audit  →  SinEvidencia siempre
  después: kernel 6.17.0-40  →  Landlock ABI 7  →  AUDIT ✓

`apt install linux-image-generic-hwe-24.04` (archivo estándar de Ubuntu 24.04, sin
PPA ni cambiar distro), reboot, y la cadena COMPLETA de evidencia corre igual que
en el laptop:
    same-exec 2 registros · new-exec 0 (el ciego) · new-exec-logon 4
    domain=14e9f83c2 blockers=fs.read_file path="/etc/passwd" dev="sda1" ino=133259
El store del catálogo (103 artefactos) sobrevivió el bump intacto.

NUEVA GOLDEN: snapshot 408909310 "hammer-golden-harkaq-6.17-2026-07-15".
farm-up.sh pasa a usarla por defecto. La vieja (405120842) queda como fallback.

+ harkaq-uapi.h — EL HALLAZGO QUE IMPORTA para un compilador continuo: **el kernel
y los headers envejecen por separado**. El worker corre 6.17 pero su
linux-libc-dev es 6.8 y NO define NADA de lo necesario: ni los flags de log de ABI
7/8, ni AUDIT_LANDLOCK_ACCESS/DOMAIN (¡los tipos de registro!), ni IOCTL_DEV de
ABI 5. El kernel puede; el compilador no sabe pedírselo.

Es el mismo error de §3.1 al revés: allá, deducir el ABI de la versión del kernel;
acá, de la versión de los headers. NINGUNA de las dos dice la verdad — la única
fuente es el syscall en runtime. Estas constantes son números de contrato de UAPI,
estables por definición, seguros de fijar con #ifndef.

Sin esto harkaq sólo compila en distros con headers al día, que es justo lo que un
compilador continuo NO puede exigir. Y el modo de falla habría sido el peor: sin
AUDIT_LANDLOCK_ACCESS el lector filtraría por un número que no conoce y vería CERO
denegaciones — el falso `Hermetico` de D9, esta vez por headers viejos.

Nota: ABI 7 da el audit (lo que el proyecto necesita); TSYNC (ABI 8) pide 7.0 y no
está — es robustez opcional de D5, no un bloqueo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 17:33:14 -04:00

85 lines
3.0 KiB
C

/* harkaq-uapi.h — las constantes del ABI de Landlock/audit, con respaldo propio.
*
* Por qué existe: **el kernel y los headers envejecen por separado**. El worker de la granja
* corre kernel 6.17 (Landlock ABI 7, con audit de denegaciones) pero su `linux-libc-dev` es
* 6.8 y no define NADA de lo que hace falta — ni los flags de log de ABI 7/8, ni
* `AUDIT_LANDLOCK_ACCESS`, ni `IOCTL_DEV` de ABI 5. El kernel puede; el compilador no sabe
* pedírselo. Medido en Ubuntu 24.04 + HWE 6.17 (SDD 16 §4.8).
*
* Es el mismo error de fondo que §3.1 advierte al revés: allá, deducir el ABI de la versión del
* kernel; acá, deducirlo de la versión de los headers. **Ninguna de las dos dice la verdad.** La
* única fuente es el syscall en runtime (`LANDLOCK_CREATE_RULESET_VERSION`), y estas constantes
* son números de contrato del kernel — estables por definición de UAPI, seguros de fijar.
*
* Sin esto, harkaq sólo compila en distros con headers al día, que es justo lo que un
* compilador continuo NO puede exigir.
*/
#ifndef HARKAQ_UAPI_H
#define HARKAQ_UAPI_H
#include <linux/audit.h>
#include <linux/landlock.h>
/* ABI 1 */
#ifndef LANDLOCK_CREATE_RULESET_VERSION
#define LANDLOCK_CREATE_RULESET_VERSION (1U << 0)
#endif
/* ABI 2 — sin REFER no compila software real (D7) */
#ifndef LANDLOCK_ACCESS_FS_REFER
#define LANDLOCK_ACCESS_FS_REFER (1ULL << 13)
#endif
/* ABI 3 */
#ifndef LANDLOCK_ACCESS_FS_TRUNCATE
#define LANDLOCK_ACCESS_FS_TRUNCATE (1ULL << 14)
#endif
/* ABI 5 */
#ifndef LANDLOCK_ACCESS_FS_IOCTL_DEV
#define LANDLOCK_ACCESS_FS_IOCTL_DEV (1ULL << 15)
#endif
/* ABI 6 — scoping de IPC (D8) */
#ifndef LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET
#define LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET (1ULL << 0)
#endif
#ifndef LANDLOCK_SCOPE_SIGNAL
#define LANDLOCK_SCOPE_SIGNAL (1ULL << 1)
#endif
/* ABI 7 — los flags de logging. LOG_NEW_EXEC_ON es del que cuelga TODO el proyecto: sin él el
* kernel no audita ninguna denegación posterior al execve y harkaq certificaría como herméticos
* todos los builds, sin un solo error visible (§3.4). */
#ifndef LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF
#define LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF (1U << 0)
#endif
#ifndef LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON
#define LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON (1U << 1)
#endif
#ifndef LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF
#define LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF (1U << 2)
#endif
/* ABI 8 */
#ifndef LANDLOCK_RESTRICT_SELF_TSYNC
#define LANDLOCK_RESTRICT_SELF_TSYNC (1U << 3)
#endif
/* Tipos de registro de audit. Sin éstos el lector no reconoce la evidencia AUNQUE el kernel la
* emita: filtraría por un número que no conoce y vería cero denegaciones — el falso `Hermetico`
* de D9, esta vez por headers viejos. */
#ifndef AUDIT_LANDLOCK_ACCESS
#define AUDIT_LANDLOCK_ACCESS 1423
#endif
#ifndef AUDIT_LANDLOCK_DOMAIN
#define AUDIT_LANDLOCK_DOMAIN 1424
#endif
/* Grupo multicast de sólo-lectura del audit (requiere CAP_AUDIT_READ). */
#ifndef AUDIT_NLGRP_READLOG
#define AUDIT_NLGRP_READLOG 1
#endif
#endif /* HARKAQ_UAPI_H */