summaryrefslogtreecommitdiff
path: root/util/libreboot-utils/lib/rand.c
AgeCommit message (Collapse)Author
28 hourslbutils/file: don't loop EINTR on close()Leah Rowe
state is undefined after EINTR. just abort universally. Signed-off-by: Leah Rowe <leah@libreboot.org>
29 hourslbutils: remove more unused macrosLeah Rowe
detected via clang -Weverything Signed-off-by: Leah Rowe <leah@libreboot.org>
31 hourslbutils/rand: close fd on urandom errorLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
32 hourslbutils: remove rw on_eintr functions. just use rwLeah Rowe
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>
33 hourslbutils: support using arc4random on linuxLeah Rowe
-DUSE_ARC4=1 use that Signed-off-by: Leah Rowe <leah@libreboot.org>
34 hourslbutils: don't set USE_OPENAT and USE_URANDOMLeah Rowe
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>
34 hourslbutils: only use GNU SOURCE for syscallLeah Rowe
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>
35 hourslibreboot-utils: don't use the GNU SOURCE macroLeah Rowe
use the POSIX one declare prototypes where necessary. Signed-off-by: Leah Rowe <leah@libreboot.org>
36 hourslibreboot-utils: fix ALL compiler warningsLeah Rowe
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>
2 dayslibreboot-utils: stricter errno handlingLeah Rowe
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>
2 dayslbutils/rand: add missing error handleLeah Rowe
accidentally removed in previous refactor Signed-off-by: Leah Rowe <leah@libreboot.org>
2 dayslibreboot-utils: unified EINTR loop handlingLeah Rowe
absolutely unified. Signed-off-by: Leah Rowe <leah@libreboot.org>
4 dayslibreboot-utils/lib: loop eintr on [p]read/[p]writeLeah Rowe
i forgot to do this! with this, I/O should be bullet proof now. i already loop this on other I/O commands. Signed-off-by: Leah Rowe <leah@libreboot.org>
5 dayslibreboot-utils: simplify random tmpdir namegenLeah Rowe
generalise it in rand.c because this logic will be useful for other programs in the future. Signed-off-by: Leah Rowe <leah@libreboot.org>
5 dayslbutils: rename mkrbuf to rmallocLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
6 dayslbutils: unify xopen and open_on_eintrLeah Rowe
use open_on_eintr for gbe files Signed-off-by: Leah Rowe <leah@libreboot.org>
6 dayslibreboot-utils: much stricter open() handlingLeah Rowe
abort on error, and do EINTR looping Signed-off-by: Leah Rowe <leah@libreboot.org>
6 dayslibreboot-utils: much stricter close() handlingLeah Rowe
remove close_warn and close_no_err make close_on_eintr a void, and abort on error instead of returning -1. a failed file closure is a world-ending event. burn accordingly. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 dayslibreboot-utils: unified error handlingLeah Rowe
i now use a singleton hook function per program: nvmutil, mkhtemp and lottery call this at the startup of your program: (void) errhook(exit_cleanup); then provide that function. make it static, so that each program has its own version. if you're writing a program that handles lots of files for example, and you want to do certain cleanup on exit (including error exit), this can be quite useful. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 dayslibreboot-utils: extremely safe(ish) malloc usageLeah Rowe
yes, a common thing in C programs is one or all of the following: * use after frees * double free (on non-NULL pointer) * over-writing currently used pointer (mem leak) i try to reduce the chance of this in my software, by running free() through a filter function, free_if_not_null, that returns if a function is being freed twice - because it sets NULL after freeing, but will only free if it's not null already. this patch adds two functions: smalloc and vmalloc, for strings and voids. using these makes the program abort if: * non-null pointer given for initialisation * pointer to pointer is null (of course) * size of zero given, for malloc (zero bytes) i myself was caught out by this change, prompting me to make the following fix in fs_dirname_basename() inside lib/file.c: - char *buf; + char *buf = NULL; Yes. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysnvmutil: clamp rand (rejection sampling)Leah Rowe
clamp rand to eliminate modulo sampling; high values on the randomisation will bias the result. not really critical for mac addresses, but there's no reason not to have this. this patches reduces the chance that two libreboot users will generate the same mac addresses! Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysrand.c: fix initialisation bug in mrkbufLeah Rowe
should be null on bad return Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysutil/libreboot-utils: fix div by zero in rsizeLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysfurther cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
7 dayslibreboot-utils: improved randomness testLeah Rowe
and the module bias handling is fully correct Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysmkhtemp rand: fix theoretical integer overflowLeah Rowe
extremely theoretical, with a T. T for theoretical. Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysrand/libreboot/utils: prevent div by zeroLeah Rowe
not really a thing. bufsiz would never be zero, unless the demon takes over linux Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysrand: fix modulo bias in rmallocLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysmore cleanup on rand.cLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayscleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslibreboot-utils: tidy up rand.cLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysrmallocLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysutil/libreboot-utils: randomisation testLeah Rowe
to test the effectiveness of the rand function Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayscleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysmkrstrLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils: new function, mkrbuf (random malloc)Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils: close fd on rset failureLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysfurther clarify intenttLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils, rset: err if zero bytes requestedLeah Rowe
similar to the logic about other failure states Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysdotLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils: also check null!Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils: clarify design regarding urandom/getrandomLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils, rand: err on zero return (fatal)Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayscleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslbutils: cast to prevent ub in rset()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayscleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysfix offset on urandom falbackLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslibreboot-utils: replace rlong() with rset()Leah Rowe
now you can send an arbitrary number of bytes with random numbers Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslibreboot-utils: tidy up randLeah Rowe
also re-add /dev/urandom support, as a config option Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysutil/mkhtemp: use /dev/urandom *if enabled*Leah Rowe
build-time option. do not allow fallback; on a system where getrandom is used, it should be used exclusively. on some systems, getrandom may not be available, even if they have a newer kernel. Signed-off-by: Leah Rowe <leah@libreboot.org>