View Issue Details

IDProjectCategoryView StatusLast Update
0006632unrealircdpublic2026-08-30 12:31
Reportersyzop Assigned Tosyzop  
PrioritynormalSeveritytweakReproducibilityhave not tried
Status resolvedResolutionfixed 
Target Version6.2.7 
Summary0006632: Some self-check of argon2 on boot
DescriptionThe past few years we had a dozen reports of an UnrealIRCd crash in the Argon2 library, SIGILL. That's because someone transfers the binaries (and the library) from machine A to machine B, and then machine B is a different CPU.... so the argon2 library contains CPU instructions machine B does not understand and crashes with SIGILL.

An idea would be some sort of check on-boot. Not sure if we can catch SIGILL, but even if not, then at least crash on boot and not when the first oper tries to oper up, which is more confusing.
3rd party modules

Activities

syzop

2026-08-30 12:31

administrator   ~0023703

AI suggested we should just fork() to test, then we don't have to catch the SIGILL at all but can just read exit status / exit signal. Good idea.

So done now: https://github.com/unrealircd/unrealircd/commit/a855f1a937d6453fe7bc4372c6d7a6710b514b79

commit a855f1a937d6453fe7bc4372c6d7a6710b514b79 (HEAD -> unreal60_dev, origin/unreal60_dev, origin/HEAD)
Author: Bram Matthys <[email protected]>
Date: Sun Aug 30 12:22:01 2026 +0200

    Add minimal self-check for Argon2 (fail early instead of crashing)

    Sometimes people copy ~/unrealircd from one machine to another,
    which is not something we encourage. We think you should just
    rebuild UnrealIRCd. In any case, they probably don't think of
    it that they might also be on a different CPU (generation).
    We ship and compile a version of the Argon 2 library optimized
    for the CPU, because otherwise Argon2 hashing is too slow
    (typically this is a 2x speedup, compared to system libs).
    However, this means if you do such simple copying of ~/unrealircd
    between machines and the CPU differs we will crash on like the
    first /OPER attempt or whatever triggers Argon2.

    We now test argon2 early and if it causes a crash such as
    "Illegal instruction" we print a clear error telling the
    user what to do. That's before we booted. So early, and a clear
    advice to the user. Much more helpful.

Issue History

Date Modified Username Field Change
2026-06-26 07:52 syzop New Issue
2026-08-30 12:30 syzop View Status private => public
2026-08-30 12:31 syzop Assigned To => syzop
2026-08-30 12:31 syzop Status new => resolved
2026-08-30 12:31 syzop Resolution open => fixed
2026-08-30 12:31 syzop Note Added: 0023703
2026-08-30 12:31 syzop Target Version => 6.2.7