Build1 distinct publisher3 min readPublished
A page-size mismatch between Chromium and a Raspberry Pi kernel made the sandbox the only way to run the job at all. The isolation it buys is real, and narrower than the word suggests.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A page size is not a runtime flag. It is fixed when the kernel is built, and every process on the box inherits it, which is why Chromium's 4 KB assumption and a 16 KB kernel cannot be reconciled by configuring anything [1]. Two moves existed: rebuild the kernel, or give the browser a different one. The rebuild was tried, and it cost the Pi its Ethernet, which on that particular box meant the house lost DNS [2]. The failure mode of the direct fix was not a stalled browser job. It was name resolution for every other device on the network.
So the guest does two jobs with one artefact. It supplies a kernel built the way the renderer expects, and it keeps that kernel away from the resolver running on the same hardware [3]. The compatibility argument and the isolation argument land on the same answer, which is unusual enough to be worth naming: here the sandbox is not a precaution layered on a working setup, it is the working setup.
Placement follows the same accounting. About 2 GB while running and a few tens of seconds to boot cold [4] is affordable on the box that has to be up anyway [5]. On the GPU box, that same guest would claim roughly a quarter of the 8 GB pool a resident model is sitting in [6][7]. The author's rule for this is that a job goes where it costs the least to be wrong about it, the same reasoning that put DNS on the low-power box to begin with [14].
The write-up is more careful than most about what the boundary does not do. A kernel-level exploit of the browser stays inside the guest; the guest talking to the rest of the LAN is a separate question that the VM does not answer [8]. Outbound traffic leaves through network address translation on the host, and translation rewrites addresses rather than refusing connections, so a compromised browser can still open a socket to anything on the local network [9]. The patch is a host firewall rule keyed to the dedicated user account the guest process runs as, denying that uid the local ranges while allowing everything else, loaded at boot and reasserted whenever a guest starts [10]. The placement is the point: enforcement lives somewhere the compromised party cannot read, let alone edit [11].
One more constraint wears a security shape and is not one. A single cookie jar that sometimes exits from the home connection and sometimes from a rotating VPN address is the exact pattern session heuristics are tuned to flag, and the profile pays in CAPTCHAs and forced re-logins until it locks out [12]. Hence two guests, one per exit mode, each with its own account, disk profile and machine identity, selected before a job starts rather than switched inside it [13]. The VPN guest's profile starts empty and stays empty, so a job wanting anonymity and a real session simultaneously has nowhere to run, and the author files that as intended rather than missing [15].
Ranked by verification strength, evidence, and original report placement.
The fix is a firewall rule on the host itself, keyed to the dedicated user account the guest's process runs as: it denies that uid's traffic to the local network ranges and allows everything else, loaded at boot and reasserted every time a guest starts.
Enforcing the rule on the host rather than trusting the guest to police itself is the point, because a compromised guest has no way to touch a rule it was never allowed to see.
Chromium's rendering engine assumes 4 KB memory pages, and the Raspberry Pi it needed to run on uses a kernel built with 16 KB pages, so navigation hung outright on the host.
The direct fix, rebuilding the Pi's kernel with 4 KB pages, broke the Pi's Ethernet and took the home network's DNS down with it, ruling out patching the host to match the browser.
Running the browser inside its own small guest, with its own kernel built the way Chromium expects, sidesteps the page-size problem entirely and never touches the host kernel, its network stack, or the DNS resolver running on that same box.
The guest costs about 2 GB of memory while it is running and a few tens of seconds to boot cold, so it stays on-demand rather than always-on.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed but unverified single-operator account
Every claim traces to one first-person dev.to post. The mechanisms described are specific and internally coherent (page-size mismatch, kernel-rebuild fallout, NAT reachability, uid inheritance on WireGuard outer packets), which is stronger than vague assertion, but the cluster contains no configuration, kernel versions, logs, benchmarks, or independent corroboration, and one claim about third-party session heuristics is asserted rather than measured.
One self-reported home deployment
Adoption evidence is a single operator's own home network, disclosed by the author. There are no user counts, no third-party deployments, no release or packaging of the setup, and no indication that anyone else runs this pattern.
Slightly understated relative to its own framing
The post actively narrows its headline promise: it states that a VM contains a kernel-level browser exploit and explicitly does not stop the guest reaching the LAN, that NAT is not a security boundary, and that the empty VPN profile is a deliberate limitation. Claims are scoped to the author's own box rather than generalized, so language sits at or slightly below what the evidence supports; the small negative is capped by the unmeasured session-lockout assertion pushing the other way.
Personal build log, no commercial stake visible
The source is an individual's dev.to post about their own home lab. No product, vendor, sponsor, employer, or paid offering is promoted anywhere in the supplied material, so distortion pressure is limited to ordinary reputational and engagement incentives for a technical blog post.
Low-moderate: coherent but n=1
Confidence is limited by a single publisher and a single self-reporting operator with no artifacts to verify. It is not lower because the account is internally consistent, mechanistically specific, self-limiting about what the isolation achieves, and includes a failure it did not have to disclose.
build
The stroke width that never rendered: SVG attributes lose every cascade fight1 distinct publisher
build
Design Diff gives coding agents a number to climb, and a box that only half points1 distinct publisher
build
Browser voice AI fails on audio routing: the echo canceller cannot see Web Audio playback1 distinct publisher
build
AmnesiaStealer drives your own browser, so session theft is the real macOS loss1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 27, 2026