[BUG] Bootstrap audit linking omits the native entry script #5

Closed
opened 2026-09-18 00:05:35 +02:00 by erikinkinen · 0 comments
Owner

Summary

Rootd's production-boundary and semantic-baseline audit builds omit its native
linker script. Under Rust 1.97.1 the linker reports a missing _start entry,
while the audit commands still succeed. This violates the warning-free build
requirement and invalidates the small linked-image size as runtime-size evidence.

Reproduction

At 38962edd4b1317e2559284263a9999a1478b7410, use Rust 1.97.1 with the
x86_64-unknown-none target and run scripts/check-production-boundary.sh.
Both object builds emit cannot find entry symbol _start; Rust reports that
linker_messages ignores -D warnings. The separate
scripts/bootstrap_baseline.py build also omits linker.ld and captures
successful-command stderr without exposing it to the enclosing audit log.

Expected and actual behavior

Expected: audit builds select the maintained Rootd entry/layout script, reject
linker warnings and retain diagnostics. Actual: the successful commands permit
an entry-less auxiliary ELF. Its 4,352-byte size is not evidence of a complete
Rootd runtime image. Object-scanner controls and source/authority inventories
remain separately evaluated; their pass does not validate that linked artifact.

Environment and identity

  • Component: Rootd signed revision above, original immutable dependencies.
  • Compiler: Rust 1.97.1, native target x86_64-unknown-none.
  • Scope: host bootstrap audit tooling, release and product-shell configurations.
  • Generic strict native builds already use linker.ld and fatal linker warnings.
  • No ordinary service image or guest failure is asserted by this host finding.

Evidence and prior checks

The complete production-boundary command exits zero and emits two linker warnings.
The generic four strict Rust matrices pass 429/428 tests and correctly linked
native builds. All 62 Python controls pass but do not catch this omission.
Preserve the original diagnostics and 4,352-byte measurement as invalid linked
runtime-size evidence; a corrected measurement is not a performance change.

Corrected original audit acceptance — 18 September 2026: Signed fix fc898a7f4020757b2571647641ca096f66c31b6f passes all 64 Python tests, all repository-specific audits and correctly linked warning-free native audit builds. The exact measured delta is only release_binary_bytes, from invalid entry-less evidence to 265,912 bytes. The ELF entry matches rootd_entry in an executable file-backed segment. CI 1031 and CI 1032 both pass; all four terminal logs are complete (222,678 bytes), without warnings. The unchanged runtime Rust inputs retain their strict 429/428-test matrix. The original warning and invalid measurement remain part of this report.

Tracking

Related: #1 and #2. Use the maintained linker script and fatal linker warnings
for both audit paths, expose successful-command diagnostics, remeasure the
baseline, and validate exact ELF entry/layout plus all repository-specific gates.
Keep original CI results visible while monitoring the corrected signed revision.

## Summary Rootd's production-boundary and semantic-baseline audit builds omit its native linker script. Under Rust 1.97.1 the linker reports a missing `_start` entry, while the audit commands still succeed. This violates the warning-free build requirement and invalidates the small linked-image size as runtime-size evidence. ## Reproduction At `38962edd4b1317e2559284263a9999a1478b7410`, use Rust 1.97.1 with the `x86_64-unknown-none` target and run `scripts/check-production-boundary.sh`. Both object builds emit `cannot find entry symbol _start`; Rust reports that `linker_messages` ignores `-D warnings`. The separate `scripts/bootstrap_baseline.py` build also omits `linker.ld` and captures successful-command stderr without exposing it to the enclosing audit log. ## Expected and actual behavior Expected: audit builds select the maintained Rootd entry/layout script, reject linker warnings and retain diagnostics. Actual: the successful commands permit an entry-less auxiliary ELF. Its 4,352-byte size is not evidence of a complete Rootd runtime image. Object-scanner controls and source/authority inventories remain separately evaluated; their pass does not validate that linked artifact. ## Environment and identity - Component: Rootd signed revision above, original immutable dependencies. - Compiler: Rust 1.97.1, native target `x86_64-unknown-none`. - Scope: host bootstrap audit tooling, release and product-shell configurations. - Generic strict native builds already use `linker.ld` and fatal linker warnings. - No ordinary service image or guest failure is asserted by this host finding. ## Evidence and prior checks The complete production-boundary command exits zero and emits two linker warnings. The generic four strict Rust matrices pass 429/428 tests and correctly linked native builds. All 62 Python controls pass but do not catch this omission. Preserve the original diagnostics and 4,352-byte measurement as invalid linked runtime-size evidence; a corrected measurement is not a performance change. Corrected original audit acceptance — 18 September 2026: Signed fix `fc898a7f4020757b2571647641ca096f66c31b6f` passes all 64 Python tests, all repository-specific audits and correctly linked warning-free native audit builds. The exact measured delta is only release_binary_bytes, from invalid entry-less evidence to 265,912 bytes. The ELF entry matches rootd_entry in an executable file-backed segment. [CI 1031](https://git.erikinkinen.fi/erix/rootd/actions/runs/1031) and [CI 1032](https://git.erikinkinen.fi/erix/rootd/actions/runs/1032) both pass; all four terminal logs are complete (222,678 bytes), without warnings. The unchanged runtime Rust inputs retain their strict 429/428-test matrix. The original warning and invalid measurement remain part of this report. ## Tracking Related: #1 and #2. Use the maintained linker script and fatal linker warnings for both audit paths, expose successful-command diagnostics, remeasure the baseline, and validate exact ELF entry/layout plus all repository-specific gates. Keep original CI results visible while monitoring the corrected signed revision.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
erix/rootd#5
No description provided.