Page MenuHomeFreeBSD

hastd: Use fixed-length protocol names
AcceptedPublic

Authored by des on Wed, Sep 9, 9:07 AM.

Details

Summary

All communication between hastd nodes and internally between hastd and
its worker children passes through the same pair of send / receive
functions. The receive function uses recv(2) with the MSG_WAITALL flag,
which in theory means we should never get a short read. However, when
handing off a socket to a worker child, we also pass a variable-length
string identifying the type of socket we're passing, and reading this
string relies on a short read. This used to work because the arrival of
the descriptor would interrupt the recv(2) call, but this bug was fixed
when the AF_UNIX code was rewritten a while ago and hastd has been
broken ever since.

Fixing the length of the protocol name to four characters including the
terminating null solves the short-read bug by never requiring a short
read (nothing else in hastd requires one).

Reported by: Martin Vidovic <xtronom@gmail.com>
MFC after: 3 days
Event: EuroBSDcon DevSummit 2026

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 76684
Build 73567: arc lint + arc unit