diff options
| author | Leah Rowe <leah@libreboot.org> | 2026-09-07 08:12:24 +0100 |
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2026-09-07 08:12:24 +0100 |
| commit | 123639e3db0757fb3370516f7eaf50cbfae4d026 (patch) | |
| tree | 2fefd5b712f2935949bd447038cfb867f49f6342 /util/libreboot-utils/lib/rand.c | |
| parent | 01cb422c9771c7daa00c6f832c3294d59802a635 (diff) | |
delete util/libreboot-utils (unused code)
this was an intense audit of nvmutil that somehow evolved
into writing a new, hardened implementation of mktemp.
it all works, a few memory bugs to solve on bsd, but i don't
see the point in keeping it. mktemp is fine, and nvmutil
already works.
lbutils implemented atomic writes and integrity checking,
in a manner completely overengineered for what it was
actually doing (modifying a few bytes in 8KB GbE files)
just delete it. i'll bring it back if i ever finish the
code. i don't want to leave dead/unfinished code in the tree.
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/libreboot-utils/lib/rand.c')
| -rw-r--r-- | util/libreboot-utils/lib/rand.c | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/util/libreboot-utils/lib/rand.c b/util/libreboot-utils/lib/rand.c deleted file mode 100644 index bf090b43..00000000 --- a/util/libreboot-utils/lib/rand.c +++ /dev/null @@ -1,200 +0,0 @@ -/* SPDX-License-Identifier: MIT - * Copyright (c) 2026 Leah Rowe <leah@libreboot.org> - * - * Random number generation - */ - -#if defined(USE_ARC4) && \ - ((USE_ARC4) > 0) -#define _DEFAULT_SOURCE 1 /* for arc4random on *linux* */ - /* (not needed on bsd - on bsd, - it is used automatically unless - overridden with USE_URANDOM */ -#elif defined(USE_URANDOM) && \ - ((USE_URANDOM) > 0) -#include <fcntl.h> /* if not arc4random: /dev/urandom */ -#elif defined(__linux__) && \ - !(defined(USE_ARC4) && ((USE_ARC4) > 0)) -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif -#include <sys/syscall.h> -#include <sys/random.h> -#endif - -#ifdef __OpenBSD__ -#include <sys/param.h> -#endif -#include <sys/types.h> - -#include <errno.h> -#include <fcntl.h> -#include <limits.h> -#include <stddef.h> -#include <string.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -#include <stdint.h> -#include <stdio.h> - -#include "../include/common.h" - -/* Regarding Linux getrandom/urandom: - * - * For maximum security guarantee, we *only* - * use getrandom via syscall, or /dev/urandom; - * use of urandom is ill advised. This is why - * we use the syscall, in case the libc version - * of getrandom() might defer to /dev/urandom - * - * We *abort* on error, for both /dev/urandom - * and getrandom(), because the BSD arc4random - * never returns with error; therefore, for the - * most parity in terms of behaviour, we abort, - * because otherwise the function would have two - * return modes: always successful (BSD), or only - * sometimes (Linux). The BSD arc4random could - * theoretically abort; it is extremely unlikely - * there, and just so on Linux, hence this design. - * - * This is important, because cryptographic code - * for example must not rely on weak randomness. - * We must therefore treat broken randomness as - * though the world is broken, and burn accordingly. - * - * Similarly, any invalid input (NULL, zero bytes - * requested) are treated as fatal errors; again, - * cryptographic code must be reliable. If your - * code erroneously requested zero bytes, you might - * then end up with a non-randomised buffer, where - * you likely intended otherwise. - * - * In other words: call rset() correctly, or your - * program dies, and rset will behave correctly, - * or your program dies. - */ - -/* random string generator, with - * rejection sampling. NOTE: only - * uses ASCII-safe characters, for - * printing on a unix terminal - * - * you still shouldn't use this for - * password generation; open diceware - * passphrases are better for that - * - * NOTE: the generated strings must - * ALSO be safe for file/directory names - * on unix-like os e.g. linux/bsd - */ -char * -rchars(size_t n) /* emulates spkmodem-decode */ -{ - static char ch[] = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - - char *s = NULL; - size_t i; - - smalloc(&s, n + 1); - for (i = 0; i < n; i++) - s[i] = ch[rsize(sizeof(ch) - 1)]; - - *(s + n) = '\0'; - return s; -} - -size_t -rsize(size_t n) -{ - size_t rval = SIZE_MAX; - if (!n) - exitf("rsize: division by zero"); - - /* rejection sampling (clamp rand to eliminate modulo bias) */ - for (; rval >= SIZE_MAX - (SIZE_MAX % n); rset(&rval, sizeof(rval))); - - return rval % n; -} - -void * -rmalloc(size_t n) -{ - void *buf = NULL; - rset(vmalloc(&buf, n), n); - return buf; /* basically malloc() but with rand */ -} - -void -rset(void *buf, size_t n) -{ - int saved_errno = errno; - errno = 0; - - if (if_err(buf == NULL, EFAULT)) - goto err; - - if (n == 0) - exitf("rset: zero-byte request"); - -/* on linux, getrandom is recommended, - but you can pass -DUSE_ARC4=1 to use arc4random. - useful for portability testing from linux. - */ -#if (defined(USE_ARC4) && ((USE_ARC4) > 0)) || \ - ((defined(__OpenBSD__) || defined(__FreeBSD__) || \ - defined(__NetBSD__) || defined(__APPLE__) || \ - defined(__DragonFly__)) && !(defined(USE_URANDOM) && \ - ((USE_URANDOM) > 0))) - - arc4random_buf(buf, n); -#else - size_t off = 0; - -retry_rand: { - -#if defined(USE_URANDOM) && \ - ((USE_URANDOM) > 0) - ssize_t rval; - int fd = -1; - - open_file_on_eintr("/dev/urandom", &fd, O_RDONLY, 0400, NULL); - - while (rw_retry(saved_errno, - rval = rw(fd, (unsigned char *)buf + off, n - off, 0, IO_READ))); -#elif defined(__linux__) - long rval; - while (sys_retry(saved_errno, - rval = syscall(SYS_getrandom, - (unsigned char *)buf + off, n - off, 0))); -#else -#error Unsupported operating system (possibly unsecure randomisation) -#endif - - if (rval < 0 || /* syscall fehler */ - rval == 0) { /* prevent infinite loop on fatal err */ -#if defined(USE_URANDOM) && \ - ((USE_URANDOM) > 0) - xclose(&fd); -#endif - goto err; - } - - if ((off += (size_t)rval) < n) - goto retry_rand; - -#if defined(USE_URANDOM) && \ - ((USE_URANDOM) > 0) - xclose(&fd); -#endif -} - -#endif - reset_caller_errno(0); - return; -err: - (void) with_fallback_errno(ECANCELED); - exitf("Randomisierungsfehler"); - exit(EXIT_FAILURE); -} |
