Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions quest/m0/build-nightly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# [XS] The build nightly passes on main

## Goal

Every row of `build.yml`'s nightly passes on `main`. After [moq-dev/rind#513](https://github.com/moq-dev/rind/pull/513) fixed the armv7 zeroing and Dart cross-target failures, three causes remain ([run 42918059953](https://github.com/moq-dev/rind/actions/runs/42918059953)).

## Plan

Planned with the maintainer on 2026-11-10 after triaging main's nightlies: ✅ m0, since m0 owns a failing `main`; ✅ one quest per workflow (rejected: one quest for every nightly).

- **Dart on the Intel Mac.** `dart (macos-15-intel)` fails `hook_test.dart`'s "builds from source for the host" with `TimeoutException after 0:00:30`: it runs a cargo build inside the default test timeout. Recommended: give that test an explicit, generous timeout; building first is the alternative. It was hidden behind the cross-target failure #513 fixed.
- **Android emulation.** The `android` rows fail (the armv7 row first; fail-fast cancels the rest) with `Package 'qemu-user-static' has no installation candidate`, since `ubuntu-latest` moved to 26.04. Install `qemu-user-binfmt` instead, at `.github/workflows/build.yml` and the same line in `python.yml`.
- **Heap-scratch leak test on qemu targets.** The `qemu` rows (powerpc64, powerpc64le, riscv64, s390x, loongarch64) fail `heap_scratch::detects_a_leak_in_key_generation` (`test did not panic as expected`, `rind/tests/heap_scratch.rs:67`); the optimizer likely removes the unused `drop(vec![1u8; 32])`. Recommended: `drop(black_box(vec![1u8; 32]))`, then confirm the cause on one qemu row. Caused by [moq-dev/rind#581](https://github.com/moq-dev/rind/pull/581).
14 changes: 14 additions & 0 deletions quest/m0/ctgrind-nightly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# [S] The ctgrind nightly passes on main

## Goal

Every row of `ctgrind.yml`'s nightly passes on `main`. Today all ten unit rows and the armv7 adapters row fail ([run 42916803474](https://github.com/moq-dev/rind/actions/runs/42916803474)), for three causes none of which is a constant-time violation in shipped code. While it is red, a real violation would go unnoticed.

## Plan

Planned with the maintainer on 2026-11-10 after triaging main's nightlies: ✅ m0, since m0 owns a failing `main`; ✅ one quest per workflow (rejected: one quest for every nightly).

- **Caller's key marked secret.** `cipher::ChaCha20::new` (`rind/src/mid/chacha20.rs:20`) calls `secret_slice` on the caller's `key` and never marks it public again. The `guard_pages::ciphers` test passes `&[7; 32]`, a constant in read-only data, which the `digests` test's `hmac::Key::new(&HMAC_SHA256, &[7; 32])` then reads, so its tag counts as secret and the test's `==` is flagged at `rind/src/low/guard_pages.rs:234`. Fix it in the library: mark rind's own copy (`Self { key: into_secret(*key) }`), as `aes_kw.rs` and `aes_cbc.rs` do. `mid/ed25519.rs:26` (`secret_slice(seed)`) has the same pattern; fix it too, and check for any other `secret_slice` on a caller-owned argument. The bug dates to [moq-dev/rind#6](https://github.com/moq-dev/rind/pull/6); [moq-dev/rind#568](https://github.com/moq-dev/rind/pull/568)'s tests exposed it.
- **Guard-page test under valgrind.** `guard_pages::planted_over_read_faults` fails on the ARM rows (`reading before the buffer did not fault`): valgrind does not fault the child's read of the guard page there. ✅ Leave the `low::guard_pages` test module out of `__ctgrind` builds, since it is a bounds test, not a constant-time one, and plain `cargo test` still runs it (rejected: skip only on ARM; detect valgrind and accept its report). Caused by #568.
- **armv7 PEM suppressions.** `admin/ctgrind.supp` silences rind-rcgen's PEM framing (`rind-rcgen-pem-utf8-index`, `read_until`) only as `Memcheck:Cond`/`Value8`; 32-bit ARM reports `Value4`. Add the `Value4` forms. Caused by [moq-dev/rind#515](https://github.com/moq-dev/rind/pull/515); it surfaced once the adapters row stopped dying at its `-lpython3.11` link step.
- The `definitely lost` lines in the logs also appear in passing runs and never count toward `admin/ctgrind`'s exit code; ignore them.