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>
85 lines
3.0 KiB
C
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 */
|