Skip to content

Diluvium 5.5.1_build12p1

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 00:37
515160f

[5.5.1_build12p1] - 2026-09-02

v5.5.1_build12p1 · Lua 5.5.1 · bytecode format 0x46

A patch release on build12: the instruction budget was switched off
by its own first firing.

A guest that tripped the budget inside its own pcall ran unbounded
from then on, for the life of the instance, and dv_usage reported it
sitting exactly at its limit the whole time. Two lines of Lua were
enough. One line of C fixes it. Read the "what this does not fix"
note below before treating the whole class as closed.

Changed

  • dv_usage keeps counting past a budget the guest tried to ignore.
    insn_used advanced only in the hook, so it froze the moment the hook
    cleared itself: an escaped instance reported exactly its limit —
    the healthiest possible reading — while running on. A supervisor
    measuring saturation from dv_usage was reading a number the defect
    controlled. usage_keeps_counting_past_the_budget holds it, asserting
    strictly greater than the limit, because the frozen value was the
    limit exactly.

Fixed

  • A guest pcall permanently disabled the instruction budget. The
    count hook cleared itself before raising:

    inst->exceeded = 1;
    lua_sethook(L, NULL, 0, 0);   /* once is enough; the error is on its way */
    luaL_error(L, "instruction budget of %I exceeded", ...);

    luaL_error raises an ordinary catchable Lua error, so a guest's own
    pcall caught it — and with the hook already cleared nothing re-armed
    it, because dv_run and dv_restore are the only other sites that arm
    it and neither is reachable again on a running instance. So:

    pcall(function() while true do end end)   -- trips the budget once
    while true do end                         -- then runs unbounded

    Measured against a 1,000,000-instruction budget, a program doing
    30,000,000 instructions of work returned DV_DONE. The hook now stays
    armed, so it fires again within DV_HOOK_STEP and the budget bounds
    the work again. a_budget_survives_a_guest_pcall holds it.

Known issues

  • What this does not fix: a guest that catches in a loop still spins.
    Stated plainly so the class is not filed as closed. The fix bounds the
    work a guest can do past its budget; it does not make the error
    uncatchable and it does not return control to the host.

    while true do pcall(function() while true do end end) end

    still never leaves dv_run — each catch buys DV_HOOK_STEP
    instructions and the loop repeats. Lua has no uncatchable error.
    Closing it needs one of: a pcall/xpcall that refuses to catch once
    exceeded is set, which is a core-file patch and so a
    CORE_PATCH_ALLOWLIST decision rather than a change; or a
    process-level watchdog, since a host inside dv_run has no way in --
    dv.h exposes no interrupt. The practical bound today is operational:
    run the host under a supervisor that restarts it, and alert on the
    restart count rather than absorbing it.

Upgrading

Nothing to do, and no format movement. One behaviour change worth
knowing: a guest that catches the budget error in a pcall no longer
continues past it — the error is re-raised roughly every 1,000
instructions until the program unwinds. A program that relied on
catching the budget error and carrying on was relying on the defect.

Built from commit 515160f64587.

Download guide

Platform File Notes
Linux (standard) diluvium_linux_static_x86_64 Static; works on Ubuntu, Fedora, CentOS, Arch
Raspberry Pi 3/4/5 diluvium_linux_static_aarch64 64-bit OS only
Raspberry Pi Zero diluvium_linux_static_armv7l 32-bit ARM
macOS (Apple silicon) diluvium_darwin_arm64 M1/M2/M3/M4
macOS (Intel) diluvium_darwin_x86_64
Windows diluvium_windows_x86_64.exe 64-bit
WASI diluvium_wasi.wasm Needs a runtime with wasm exception-handling (wasmtime 28+ with -W exceptions=y)
Browser libdiluvium_wasm_unknown.a wasm32-unknown-unknown static library

Each platform also ships a diluvium_compiler_* binary (luac
with the -r analysis report flag) and a libdiluvium_*.a static
library for embedding.

Verifying a download

sha256sum -c SHA256SUMS.txt --ignore-missing

BUILDINFO.txt records the exact commit, build time and workflow run.