Commit Graph

1279 Commits

Author SHA1 Message Date
Leah Rowe 4bf96fbc1e nvmutil-standalone: add eintr safety
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 17:38:31 +01:00
Leah Rowe dec63fc274 add gitignore
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 17:03:18 +01:00
Leah Rowe 2d33754a5c fix make file
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 13:54:01 +01:00
Leah Rowe 6d3341c637 nope. use nvmutil from libreboot 26.01
guaranteed not to break on openbsd (tm)

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 13:50:54 +01:00
Leah Rowe b1b1d2cf0c remove pledge in nvmutil
don't fix it for now. this version was buggy.

i'm only using nvmutil for now, until i properly
fix all the memory issues in lbutils on openbsd.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 13:48:27 +01:00
Leah Rowe 6f9f0f7321 fix nvmutil Makefile for openbsd
same fix i did for lbutils

the nvmutil version is the same one used before
lbutils was introduced. just before.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 13:44:36 +01:00
Leah Rowe 7f4f07fc40 use old nvmutil for now, in lbmk
i'm trying to make nvmutil work on openbsd. the new code
in lbutils is a bit buggy, likely somewhere in mkhtemp.
i'm still debugging it.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 13:39:29 +01:00
Leah Rowe 4b5aca8ff8 now mkhtemp works on openbsd!
yay

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 06:42:08 +01:00
Leah Rowe e097eb5483 lbutils: don't use stack memory for path strings
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 06:39:50 +01:00
Leah Rowe 7faf014a84 further makefile cleanup in lbutils
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 06:09:08 +01:00
Leah Rowe 0205c0e6b0 lbutils: remove xpledge/xunveil, just call them direct
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 05:54:50 +01:00
Leah Rowe 7ff5d925bf fix bsd
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 05:49:32 +01:00
Leah Rowe 59fefd9c57 tidy up lbutils makefile
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-21 05:47:25 +01:00
Leah Rowe 7619bfed65 lbutils/mkhtemp: correct return value check
check if above or equal to zero, except where
counterindicated. this is the usual way on unix,
where a command returns -1 on error, or above/equal
to zero on success.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-10 22:59:08 +01:00
Leah Rowe 9dab2ffa29 lbutils/mkhtemp: use openat_on_eintr
missing EINTR handling fixed

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-10 22:59:08 +01:00
Leah Rowe f055809c17 lbutils/file: only override EEXIST if not set
in the linux fast path, we are universally overriding
errno with EEXIST, which pollutes errno in case of
debugging under fault condition. this is inconsistent
with posix and also leah.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-10 22:59:08 +01:00
Leah Rowe fc3c7b9c3e lbutils/file: tidy up mkhtemp_tmpfile_linux
make failure more obvious. no behavioural change.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-10 22:59:08 +01:00
Leah Rowe 63ec707698 lbutils/file: ignore close err if errno is EINTR
but DONT LOOP IT. see comment.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 21:05:08 +01:00
Leah Rowe 2d69d45e26 remove dead code
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 20:36:05 +01:00
Leah Rowe 6b67e12428 lbutils/file: don't eintr loop fcntl
not indicated. the way we use it is basically like
stat, to check that a file exists / is a file.

just err the fuck out

nuance: SETLK is non-blocking (no wait).
we should loop on SETLKW, but we don't use that.
in this codebase, we use SETLK for locking a
tmpfile, but because of race conditions and
wanting to make another file quickly, we just
try again with a newly generated name, with a
certain number of retries, so we justt use SETLK

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 20:17:26 +01:00
Leah Rowe a6d2de4e88 libreboot-utils: don't loop lseek on EINTR
not necessary.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 19:17:32 +01:00
Leah Rowe d12ca7fd8e lbutils/file: don't use undefined USE_OPENAT
clang -Weverything told me to

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 19:09:26 +01:00
Leah Rowe 736a2504bb lbutils/file: don't loop EINTR on close()
state is undefined after EINTR. just abort universally.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 17:43:43 +01:00
Leah Rowe 249ae57c29 lbutils/file: fix implicit conversion on openat2
as dictated by clang -Weverything

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 17:33:01 +01:00
Leah Rowe c48a962eaf lbutils/file: fix overflow check
clang -Weverything:

lib/file.c:165:49: warning: implicit conversion changes signedness: 'ssize_t' (aka 'long') to 'size_t' (aka 'unsigned long') [-Wsign-conversion]
  165 |                 if (if_err(rval >= 0 && (size_t)rval > (nrw - rc), EOVERFLOW))

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 17:29:28 +01:00
Leah Rowe 3d24aa98f9 lbutils: remove more unused macros
detected via clang -Weverything

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 16:50:50 +01:00
Leah Rowe ae5e74554a lbutils/file: remove unused macro
not needed here (detected with clang -Weverything)

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 16:49:19 +01:00
Leah Rowe fb81b7b736 lbutils/file: rename rw_file_exact
call it rw_exact, so that it's closer to
the name rw. it matches naming more closely;
the alternative was to call rw rw_file

but read/write can handle more than just files!

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 16:20:12 +01:00
Leah Rowe f68cedf202 libreboot-utils/file: never retry file rw on zero
even with a timer, it's possible that on a buggy system,
we may keep writing even though the outcome is zero. if
a system comes back with zero bytes written, that is a
fatal bug and we should stop.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 16:19:46 +01:00
Leah Rowe 5b465d3af6 lbutils: remove -Werror
the actual warn flags are still there.

leaving Werror in production is ill advised.

i can (and will) still fix build errors as
i see them.

as a result of this, i now also see more info
when i type:

make strict

(this uses clang with -Weverything)

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 15:02:52 +01:00
Leah Rowe 9dc141bafa lbutils/rand: close fd on urandom error
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 14:35:24 +01:00
Leah Rowe a879114734 lbutils: remove rw on_eintr functions. just use rw
rw is enough. i unified everything there.

next commit will remove rw_type and instead
run positional i/o depending on whether the
offset is zero. i'm simplifying the API a lot.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 14:29:39 +01:00
Leah Rowe 229a283604 lbutils: portable options in Makefile
add options for building with urandom+openat and
arc4+openat. useful for emulating a bsd / old linux
environment in modern linux distros, for portability
testing.

these options are not recommended for everyday use.
just use make without any special options, and the
code has build-time OS detection for features like
randomisation/openat2.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 13:03:30 +01:00
Leah Rowe 4e72555ac7 lbutils: support using arc4random on linux
-DUSE_ARC4=1

use that

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 12:44:38 +01:00
Leah Rowe 44004191cb lbutils: don't set USE_OPENAT and USE_URANDOM
these can be set explicitly in the compiler flags,
e.g.

make CC="cc -DUSE_OPENAT=1 -DUSE_URANDOM=1"

these options, if set to 1, will cause you to use
the code as if it were running on non-linux systems
such as openbsd. of course, some differences will
still exist, but this is useful for portability
testing when compiling on linux.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 12:30:55 +01:00
Leah Rowe 2c40ad7816 lbutils: only use GNU SOURCE for syscall
and remove manual prototypes; fchmod, realpath
and so on rely on the _XOPEN_SOURCE macro.

the POSIX macro wasn't needed: _XOPEN_SOURCE
is sufficient.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 11:52:53 +01:00
Leah Rowe 716140b80f libreboot-utils: don't use the GNU SOURCE macro
use the POSIX one

declare prototypes where necessary.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 11:00:58 +01:00
Leah Rowe b7b34413e7 libreboot-utils: fix clang hell mode
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 10:23:48 +01:00
Leah Rowe d100ea1d2f libreboot-utils: always use strict cc flags
otherwise, i will end up with a mess like the
one i recently fixed.

we always want to use correct C. the current
spec is set to c99, with -pedantic turned on.

flags now:

-Os -Wall -Wextra -std=c99 -pedantic -Werror

if you do: make hell, you get (uses clang):
-Os -Wall -Wextra -std=c99 -pedantic -Werror -Weverything

i initially loosened up the Makefile rules, so
that the code would be more "portable", but
every compiler worth caring about has these
flags, and turning them on is advisable,
especially pedantic and -std, because you want
to have some guarantee that the compiler is
generating correct code; if the standard is
left ambiguous, you could be introducing subtle
bugs when people compile it, because who knows
what spec the compiler is using?

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 10:11:30 +01:00
Leah Rowe 861f56375a libreboot-utils: fix ALL compiler warnings
i wasn't using strict mode enough in make:

make strict

now it compiles cleanly. mostly removing
unused variables, fixing implicit conversions,
etc.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 10:03:41 +01:00
Leah Rowe df5bb1c894 libreboot-utils: loop fcntl on eintr
but i can't write a generic function for this,
because fcntl is a variadic function, so wrapping
cannot be done cleanly.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 06:17:25 +01:00
Leah Rowe f90af15502 safer macro
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-04-01 06:10:57 +01:00
Leah Rowe e731893208 util/nvmutil: call usage if argc below 3
otherwise, we invoke the state machine in weird
conditions, where some pointers may not be initialised.

we could handle this properly, but why?

therefore, the errhook is called after the argc
check.

this patch fixes a Speicherzugriffsfehler that
i got while running nvmutil with below 3 arguments

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 17:54:48 +01:00
Leah Rowe d2abde5303 libreboot-utils: stricter errno handling
where possible, try not to clobber sys errno. override
it only when relatively safe.

also: when a syscall succeeds, it may set errno. this
is rare, but permitted (nothing specified against it
in specs, and the specs say that errno is undefined
on success).

i'm not libc, but i'm wrapping around it, so i need
to be careful in how i handle the errno value.

also:

i removed the requirement for directories to be
executable, in mkhtemp.c, because this isn't required
and will only break certain setups.

in world_writeable and sticky, i made the checks stricter:
the faccessat check was being skipped on some paths, so
i've closed that loophole now.

i also generally cleaned up some code, as part of the errno
handling refactoring, where it made sense to do so, plus a
few other bits of code cleanup.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 17:49:23 +01:00
Leah Rowe c0fd88155a lbutils/rand: add missing error handle
accidentally removed in previous refactor

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 14:14:44 +01:00
Leah Rowe 6d9f162f5b lbutils/file: only support real pread/pwrite
the portable version was written for fun, but
it's bloat, and makes the code hard to read.

every unix since about 2005 has these functions.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 12:22:42 +01:00
Leah Rowe a769537554 lbutils/file: don't alllow EAGAIN/EWOULDBLOCK
a non-blocking file descriptor could be used while
errno is set to these. this would create an infinite
loop. it's better that we only allow EINTR.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 12:06:33 +01:00
Leah Rowe bca09eebf3 lbutils/file: remove ETXTBSY from exemption on io
obsolete. ripe for abuse. do not permit this error.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 12:04:37 +01:00
Leah Rowe 277c0c8e87 lbutils/file: don't reset errno on successful io
some io syscalls may set errno on success. this patch
honours that. we try to preserve caller errno, but it
is important for debugging not to clobber it.

if fs_err_retry errs, then we don't reset errno.
if fs_err is successful but errno wasn't set, we
restore caller errno. this is done by setting errno
to zero in callers, which also restore caller errno.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 12:03:46 +01:00
Leah Rowe aacf9fb6c9 libreboot-utils: unified EINTR loop handling
absolutely unified.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-03-31 11:45:21 +01:00