## bcoles/kasld — v0.4.0…v0.4.1

_123 commits._

### Features
- **tests/vm: add an s390x cell that boots 4-level** (cc3577c)
- **tests/vm: add an x86_64 4.19 cell, and name the cause of the MIPS 6.6 exclusion** (c9635db)
- **fixtures: add kallsyms for milkv-duos-buildroot-2021.05-5.10.4-tag-** (87155d8)
- **rules: add va_bits_from_scalar** (d9c0432)
- **tests: add test_riscv64_no_seed** (914b3bd)
- **tests/vm: add an arm64 cell that carries the ftrace address tables** (a6f5ff9)

### Backend
- **Bump version to 0.4.1** (6bcbce1)
- **check-results: test RAM membership against the extents, not the hull** (b9c308b)
- **tests/vm: hold kernel line and configuration fixed in the residual chart** (dfeae22)
- **validate-bundle: fake a RAM total that still names a page granule** (fc5f9c3)
- **components: derive the page size from the RAM total on a capture** (c7ec8ff)
- **tests: check the newest arm64 layout against a physical machine** (1faf4cf)
- **arm64: record that the vmalloc span cannot date the layout** (3ad95ab)
- **arch: declare which layouts invert a huge page to a page size** (ada1ec9)
- **arm64: model four more vmalloc layouts; give captures a page size** (4cd8380)
- **arm64: separate the VA width a probe measures from the kernel's own** (cb85101)
- **arm64: bound the vmemmap width test; model both pre-flip vmalloc shapes** (065fdd8)
- **rules: keep the vmalloc width inversion below the sound floor** (07e7a78)
- **arm64: resolve the running VA width from VmallocTotal** (b48dddc)
- **render: state when the two entropy forms disagree, not which row does** (1acffb4)
- **tests: read a captured tree the way the replay harness does** (605a495)
- **report: count the direct-map baseline from the floor its residual uses** (648af58)
- **rules: say why the image-base floor restore is x86_64 only** (c7bf497)
- **tests: check no resolved count exceeds the set it is stated against** (d83dbaf)
- **render: state the residual against the window the machine alone fixes** (598e611)
- **arch: say which configurations each window constant holds for** (fb92627)
- **render: decide a window's spelling from its edges, not their values** (60fc3b6)
- **proc_kallsyms: name the rule that hides the addresses, not one sysctl** (cc5802a)
- **arm64: the pre-flip image starts TEXT_OFFSET above KIMAGE_VADDR** (155ecc0)
- **arm64: a read config that rules out KASAN widens the no-KASLR exclusion** (e7200b3)
- **arm64: narrow the no-KASLR image band when the layout stays ambiguous** (40e1390)
- **clang-format** (1fe6584)
- **render: publish a baseline only where it can serve as a denominator** (620e4a7)
- **riscv64: floor the image at KERNEL_LINK_ADDR once the width proves the layout** (c0e54c5)
- **arm64: bound the image base from the width when the layout stays ambiguous** (ca0a6b0)
- **arm64: a 52-bit width proves the flipped layout only on 4K/16K pages** (c4505bd)
- **report: state both edges of an interval, always** (dbdd803)
- **s390: derive the paging level and bound the image base with it** (5e0bb01)
- **s390: derive the paging level from the config the kernel read** (12a7b90)
- **s390: drop the paging-level probe, which could not observe the level** (9fad3e8)
- **s390: stop flooring the image base at the KASLR-off address** (4534178)
- **components: declare the log fallback a dmesg reader already uses** (24f74fe)
- **render: name a group gate from the tree, not from the fallback table** (41c98f8)
- **render: count components in the compile-time surface, not dependencies** (c9e6d3a)
- **render: state an empty mitigations list rather than hiding it** (4a5c03a)
- **tests: guard the one colour every diagram titles itself in** (d89e594)
- **tests/vm: build the MIPS cells with perf events, and regenerate the matrix** (ada0f36)
- **riscv64: stop reading the direct-map estimate as a layout proof** (995781a)
- **riscv64: floor the image base at the link address once the layout resolves** (ecc0bd2)
- **s390: keep the zero text floor out of two zero-means-absent tests** (eec759e)
- **arch: record the layouts the mips64 and x86_64 text floors exclude** (9b93104)
- **s390: floor the image-base window at the identity-mapped link address** (44aceaf)
- **arch: carry the validation range with the honest-top floor** (427884d)
- **diagram: correct the per-architecture KASLR entropy floors** (bcaedcf)
- **diagram: rename entropy-by-arch to residual-entropy-by-arch** (85a3355)
- **extra: read the document format before trusting the fields** (e5864c6)
- **json: publish a schema for the document, and a version for the format** (184d8a9)
- **ksymoff: take the page geometry from the line, not from a list of machines** (4cf5a4d)
- **render: publish the page size and struct-page size** (637f251)
- **engine: pin the paging level from one rule, and declare s390's widths** (a2835e9)
- **ksymoff: state the page-shift default where no line names the machine** (5f69a52)
- **engine: reserve a zero VA_BITS candidate for the undeclared architectures** (df57119)
- **outcome: a component that never started has not found nothing** (773b59b)
- **target: ask uname whether this kernel is one we model** (52b118a)
- **tests: render each format once per target, not once per question** (7ee13c9)
- **tests: read each component's section table once, not once per section** (7a070c9)
- **tests: bound the live runs whose results these guards never read** (19d0f11)
- **tests: name an architecture to KASLD in one place** (e63aec2)
- **api: take a capture's architecture from what the capture records** (6d35f60)
- **api: refuse a capture this build does not model** (b6d8c1f)
- **engine: hold a constraint to the trust of what it rests on** (fb07ad5)
- **constraint: state the confidence rule as a rule's obligation** (8521c74)
- **estimate: order constraints by their second operand too** (1cb7541)
- **engine: make a run's curation its own** (d343726)
- **ksymoff: gate the page shift, and make the mode one axis** (c2f4e71)
- **ksymoff: carry the linear-map anchor through physical translation** (4187b6e)
- **tests: check with a macro the preprocessor cannot remove** (03b04c6)
- **render: group long counts, and give every quantity a denominator or none** (9fb83fb)
- **render: decide physical map membership in one place** (e487279)
- **render: draw the address-space maps on a weighted rail** (5c56e7e)
- **render: give the address-space map its own file and a to-scale bar** (cc32585)
- **report: merge overlapping exclusions into the holes they carve** (973981f)
- **components: route every diagnostic through the levelled logger** (9ba13fa)
- **render: say why a leak source is unreadable, not just that it is** (aa0e123)
- **tests: name the mechanism that hides a denial as an absence** (c13aad0)
- **extra: state what a posture was measured against** (31523c2)
- **components: announce the technique before the first fallible call** (f1a7f22)
- **dmesg_layout: store the region lines as inclusive extents** (ada5500)
- **components: give each image-size source back to the file it reads** (8de0b4c)
- **proc_kallsyms: bound the image footprint from the outer symbols** (b3a7e81)
- **tracefs: bound the image size by the span of the ftrace address table** (1c3a35a)
- **regions: store every leaked extent as an inclusive last address** (998378b)
- **components: bound the image size from the boot "Memory:" summary** (e6a3b61)
- **kernel size: bound the image by the .BTF section's length** (de7f6ea)
- **kernel size: read the blob's size where its content is withheld** (8e445ab)
- **render: report the base residual as an exact slot count** (9da3e93)
- **riscv64: read a visible FDT kaslr-seed as a KASLR-off signal** (c58f5ad)
- **tracefs: let a live canonical mount settle whether the table exists** (2943e64)
- **tracefs: classify a row by ftrace's module tag, not the address band** (2f7eb70)
- **engine: draw constraint ids from a space disjoint from evidence ids** (6a2ddf4)
- **avx_maskload: require the band to begin at the lowest standout** (1d7dfbf)
- **arm64: admit both linear-map bases a resolved paging width allows** (31b8465)
- **Bump version to 0.4.1-dev** (648f18d)

### Docs
- **docs: update docs** (a66b6d5)
- **docs: update docs** (0351474)
- **docs: regenerate the reproducibility matrix and state its boot variance** (8fb817e)
- **docs: attribute the aarch64 likely-window miss to the layout era** (4c600db)
- **docs: regenerate the results matrix** (6069704)
- **docs: update docs** (dbe100f)
- **docs: say that a denial commonly presents as an absent source** (7240f23)
- **docs: chart the entropy each architecture's KASLR actually provides** (a7e75b2)
- **docs: hold the diagram set to one palette** (25cb892)
- **docs: the fleet label is the operator's, not the document's** (48637b8)
- **docs: illustrate the placement window from which KASLR chooses** (5a7c9f6)
- **docs: state the soundness property formally** (30e60c5)
- **docs: list install-strip and fuzz in make help** (6badfa0)
- **docs: update bypass-techniques** (336cd91)

### Chore
- **build: replace the installed component directory instead of adding to it** (ef2f401)
- **build: record header dependencies instead of declaring them** (a7195c3)
- **build: give the cross loop its own flag channel** (ddda0aa)
- **build: select components at build time with COMPONENTS** (dc9bd95)
- **build: drop component binaries whose source is gone** (5180f9f)
- **build: rebuild on a version change; bump the rendered banners with it** (7f94db1)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/bcoles/kasld?utm_source=github-action)._