These docs are under active development and cover the v0.20 Kobicha security model.
On this page
§6.4

Error Model

All syscalls and ioctls use standard Linux error conventions: syscalls return -1 and set errno; ioctls return -1 and set errno.

§6.4.1 Registry-specific errno semantics

Errno Registry meaning
ENOENT Key or value does not exist after layer resolution. Enumeration index past end.
EACCES AccessCheck denied the required access right, or the fd's granted mask lacks it.
EINVAL Invalid path, invalid arguments, operation on committed/closed transaction, symlink target not REG_LINK type, maximum key depth exceeded.
ENAMETOOLONG Key name component or value name exceeds MaxPathComponentLength, or total path length exceeds MaxTotalPathLength.
ELOOP Symlink resolution depth exceeded.
ETIMEDOUT Source did not respond within RequestTimeoutMs.
EIO Source returned an internal error, or source is unavailable.
ENOMEM Kernel memory allocation failed.
ENOSPC Layer cap exceeded. Value data exceeds MaxValueSize.
ENOTEMPTY Cannot delete a key that has visible children.
EXDEV Transaction operation targets a different hive than the transaction's bound hive.
EPERM Operation requires a privilege the caller does not hold (symlink creation, layer creation at precedence > 0, layer precedence elevation, backup, restore).
EAGAIN Conditional write failed -- the layer entry's sequence number did not match the expected value. Caller SHOULD re-read and retry.
EBUSY Transaction could not acquire write lock, or MaxBoundTransactionsPerSource exceeded (operation that would bind a new transaction).
ERANGE Caller-provided buffer is too small. The required size is written to the output length field. Caller SHOULD retry with a larger buffer.
EEXIST Path entry or key already exists (duplicate creation at the source).
ENOTSUP Source does not support explicit transactions (returned on reg_begin_transaction).
EBADF Fd argument is not valid or not open in the required mode (e.g., backup output fd not writable, restore input fd not readable).