Skip to content

F4.7: endurecimiento de memoria — política W^X (exec-never) MPU#85

Merged
guillo93 merged 1 commit into
mainfrom
f4.7-memory-hardening
Jun 3, 2026
Merged

F4.7: endurecimiento de memoria — política W^X (exec-never) MPU#85
guillo93 merged 1 commit into
mainfrom
f4.7-memory-hardening

Conversation

@guillo93
Copy link
Copy Markdown
Owner

@guillo93 guillo93 commented Jun 3, 2026

Resumen

  • W^X (exec-never): toda región MPU escribible se marca con el bit XN del RASR → ninguna región es a la vez escribible y ejecutable. SDRAM (heap), KERNEL_RAM (data/bss/stacks) y APP_STACK (stack userland) pasan a exec-never; el código vive solo en flash (RX). Userland ya no puede ejecutar shellcode depositado en su propia pila.
  • Auditoría MPU: nueva mpu::audit_wx (reexport mpu_audit_wx) que relee RASR de las 8 regiones y verifica la invariante W^X en runtime; defensa en profundidad. Los ejemplos la registran al boot ("W^X audit: PASS").
  • Stack overflow: ya cubierto por STACK_GUARD (F1.4/F3.7).

Validación

  • F769: "W^X audit: PASS", selftests PASS, kernel estable, fault/safe-mode OK.
  • F407: "W^X audit: PASS", selftests PASS, fault/safe-mode OK.
  • Marcar la RAM exec-never no rompe nada (kernel ejecuta solo desde flash).
  • host-tests 29 OK; fmt/clippy(×2)/doc limpios.

Test plan

  • Flash + RTT F769 (W^X PASS, sin regresión)
  • Flash + RTT F407 (W^X PASS, sin regresión)
  • cargo fmt --all
  • clippy thumbv7em + thumbv7m
  • cargo doc -D warnings
  • host tests

🤖 Generated with Claude Code

…es MPU

- W^X: toda región MPU escribible se marca exec-never (bit XN del RASR), de modo
  que ninguna región es a la vez escribible y ejecutable. El código vive SOLO en
  flash (RX, write-never):
    * SDRAM (heap): + XN
    * KERNEL_RAM (data/bss/stacks): + XN
    * APP_STACK (stack userland, app_region_for): + XN — userland no puede
      ejecutar shellcode depositado en su propia pila.
  (periféricos y stack-guard ya eran XN; flash es RX.)
- Auditoría de regiones MPU: nueva `mpu::audit_wx(&mut MPU)` que relee RASR de
  las 8 regiones y verifica la invariante W^X (escribible ⇒ exec-never),
  devolviendo bool. Reexportada como `mpu_audit_wx`. Defensa en profundidad:
  detecta una regresión de atributos antes de exponer la superficie a userland.
- Ejemplos F407/F769: auditan W^X tras `platform_init` y lo registran
  ("W^X audit: PASS"). Detección de stack overflow ya cubierta por STACK_GUARD.

Validado RTT: F769 y F407 "W^X audit: PASS", todos los selftests PASS, kernel
estable, churn fault/respawn + safe-mode sin regresión (marcar la RAM exec-never
no rompe nada: el kernel ejecuta solo desde flash). host-tests 29 OK.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@guillo93 guillo93 merged commit 63ea1a4 into main Jun 3, 2026
9 checks passed
@guillo93 guillo93 deleted the f4.7-memory-hardening branch June 3, 2026 10:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant