You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: Standardize American spelling and KASLD casing, refreshed samples
Standardize spelling to American (-ize) across the tool's output, comments, and
docs: the banner now reads "Kernel ASLR derandomization", matching the body
("not derandomized"); the kernel only ever emits the American spelling, so
parsers are unaffected. Standardize the project name as KASLD, with `kasld`
reserved for the command.
Rewrite the usage.md intro to lead with purpose (recover a running kernel's
layout via components feeding an inference engine) instead of internal
component mechanics. Regenerate every README/usage output sample from a vanilla
kernel.org x86_64 6.15.6 boot under kernel-default settings — added a
`x86_64-vanilla` build-kernel spec and a `stock` VM profile (unprivileged, no
sysctls weakened or hardened) to make those samples reproducible.
Copy file name to clipboardExpand all lines: docs/architecture.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -198,7 +198,7 @@ Components communicate results to the orchestrator via tagged lines on stdout:
198
198
|`pos`|`base` / `top` / `interior` / `extent` / `unknown`| What the address keys represent within the region. `base` requires `lo`, `top` requires `hi`, `interior` requires `sample`, `extent` requires both `lo` and `hi`. `unknown` requires at least one of the address keys. |
199
199
|`conf`|`parsed` / `derived` / `inferred` / `heuristic` / `timing` / `brute`| How reliable the source is. Strict trust ordering — see [Confidence](../CONTRIBUTING.md#confidence). |
200
200
|`lo` / `hi`|`0x`-prefixed hex | Inclusive extent bounds. Either may be absent. |
201
-
|`sz`|`0x`-prefixed hex | Mutually exclusive with `hi`. Parser normalises to `hi = lo + sz - 1`. Rejected on overflow or `sz == 0`. |
201
+
|`sz`|`0x`-prefixed hex | Mutually exclusive with `hi`. Parser normalizes to `hi = lo + sz - 1`. Rejected on overflow or `sz == 0`. |
202
202
|`sample`|`0x`-prefixed hex | A representative interior point. |
203
203
|`base_align`|`0x`-prefixed hex, power of two | Declared alignment of the extent base. Optional. |
204
204
@@ -240,7 +240,7 @@ cannot start there). A covering is therefore:
240
240
241
241
-**Not corroboratable, never merged.** Two sources' maps must not be mixed: a
242
242
runtime-offlined block is RAM in the boot E820 but a hole in a hotplug view, so
243
-
unioning would melt a real gap or synthesise a false one. Each map is
243
+
unioning would melt a real gap or synthesize a false one. Each map is
244
244
independently complete for its own substrate.
245
245
-**Routed out-of-band.** The orchestrator sends `pos=extent` records to a
246
246
dedicated `coverings[]` store on the evidence set, **bypassing the merge**, and
@@ -268,7 +268,7 @@ derived records during the fixpoint loop after collecting all leaked results.
268
268
Components that leak a physical address can convert it to a direct-map virtual
269
269
address using `phys_to_directmap_virt(p)`, guarded by
270
270
`#ifdef phys_to_directmap_virt` so the derivation is compiled out on arches where
271
-
the projection is unsound (x86_64 `CONFIG_RANDOMIZE_MEMORY`randomises the
271
+
the projection is unsound (x86_64 `CONFIG_RANDOMIZE_MEMORY`randomizes the
272
272
direct-map base; arm64 / riscv64 / s390 keep text and direct map at independent
273
273
runtime offsets). The component emits two records — one `PHYS`, one `VIRT` — both
274
274
with the same `(region, name)`. The merge pass keeps them as separate records
@@ -308,12 +308,12 @@ Key rules for cross-region derivation:
308
308
how a runtime vmsplit propagates on coupled architectures.
309
309
-**`directmap_kaslr_disabled_pin`** (x86_64) — when `CONFIG_KASAN=y`
310
310
(`SF_KASAN_ENABLED`) or KASLR is off (`SF_VIRT_KASLR_DISABLED`) the direct-map
311
-
randomisation is suppressed (`kaslr_memory_enabled() = kaslr_enabled() &&
311
+
randomization is suppressed (`kaslr_memory_enabled() = kaslr_enabled() &&
312
312
!CONFIG_KASAN`), so `Q_PAGE_OFFSET` / `Q_VMALLOC_BASE` / `Q_VMEMMAP_BASE` are
313
313
pinned to their compile-time L4/L5 defaults — the paging level from
314
314
`SF_VIRT_ADDR_BITS` (cpuinfo, leak-free) or, when that is unavailable, a
315
315
resolved `Q_VA_BITS` (e.g. from a direct-map leak). Kernel TEXT KASLR is
On **decoupled** architectures (x86_64, arm64, riscv64, s390), physical and
332
-
virtual KASLR are randomised independently, so physical results cannot derive
332
+
virtual KASLR are randomized independently, so physical results cannot derive
333
333
virtual text directly. The summary prints a note when physical results exist that
334
334
would have been derivable on a coupled system.
335
335
@@ -348,8 +348,8 @@ they have different implications for the inference engine:
348
348
| State | Scalar fact(s) | Kernel position | Engine action |
349
349
|---|---|---|---|
350
350
|**Disabled** (user/build opt-out) |`SF_VIRT_KASLR_DISABLED` + `SF_PHYS_KASLR_DISABLED`| Compile-time default on each axis |`virt_kaslr_disabled_pin` pins `Q_VIRT_IMAGE_BASE` on arches that set `KASLR_DISABLED_PINS_VIRT_TEXT`; `phys_kaslr_disabled_pin` pins `Q_PHYS_IMAGE_BASE` on arches that set `KASLR_DISABLED_PINS_PHYS`; on x86_64 `directmap_kaslr_disabled_pin` also pins the direct-map bases |
351
-
|**Direct map unrandomised** (x86_64 `CONFIG_KASAN`) |`SF_KASAN_ENABLED`| TEXT still randomised; `page_offset` / `vmalloc` / `vmemmap` at their L4/L5 defaults |`directmap_kaslr_disabled_pin` pins the three direct-map quantities — `kaslr_memory_enabled() = kaslr_enabled() && !CONFIG_KASAN`, so KASAN suppresses `RANDOMIZE_MEMORY` even when it is configured |
352
-
|**Unsupported** (arch never had KASLR) | both `SF_*_KASLR_DISABLED`synthesised with origin `arch-no-kaslr`| Bootloader-determined | Inert for inference (these arches set neither pin flag); lights the renderer's "KASLR not supported" banner |
351
+
|**Direct map unrandomized** (x86_64 `CONFIG_KASAN`) |`SF_KASAN_ENABLED`| TEXT still randomized; `page_offset` / `vmalloc` / `vmemmap` at their L4/L5 defaults |`directmap_kaslr_disabled_pin` pins the three direct-map quantities — `kaslr_memory_enabled() = kaslr_enabled() && !CONFIG_KASAN`, so KASAN suppresses `RANDOMIZE_MEMORY` even when it is configured |
352
+
|**Unsupported** (arch never had KASLR) | both `SF_*_KASLR_DISABLED`synthesized with origin `arch-no-kaslr`| Bootloader-determined | Inert for inference (these arches set neither pin flag); lights the renderer's "KASLR not supported" banner |
353
353
|**Randomization failed** (boot stub tried, no entropy) |`SF_VIRT_KASLR_RANDOMIZATION_FAILED` + `SF_PHYS_KASLR_RANDOMIZATION_FAILED`| Firmware-/boot-stub-deterministic, NOT the link-time default | Does not pin. Drives the hardening-report entropy downgrade, `efi_loader_kernel_pick` lowest-survivor disambiguation, and the `s390_text_no_random` upper bound |
354
354
355
355
**Disabled.** KASLD treats the virtual and physical disable signals as
@@ -367,7 +367,7 @@ riscv64, loongarch64, s390), gated by a window-containment soundness check;
367
367
that set `KASLR_DISABLED_PINS_PHYS` (currently x86_64 and loongarch64).
368
368
369
369
**Unsupported.** "KASLR not supported" (compile-time `KASLR_SUPPORTED=0` — arm32,
370
-
ppc64, riscv32, sparc) is synthesised by the orchestrator as both facts with
370
+
ppc64, riscv32, sparc) is synthesized by the orchestrator as both facts with
371
371
origin `arch-no-kaslr`, inert for inference, but lights the renderer's "KASLR not
0 commit comments