From 7cd588a445d70d8cc7ed0cbae36be001ee56cae1 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Wed, 25 Mar 2026 23:53:51 +0000 Subject: rmalloc Signed-off-by: Leah Rowe --- util/libreboot-utils/include/common.h | 1 + util/libreboot-utils/lib/rand.c | 10 ++++++++++ util/libreboot-utils/lottery.c | 13 +++++++++++++ 3 files changed, 24 insertions(+) (limited to 'util') diff --git a/util/libreboot-utils/include/common.h b/util/libreboot-utils/include/common.h index 4668cffa..ebad01bf 100644 --- a/util/libreboot-utils/include/common.h +++ b/util/libreboot-utils/include/common.h @@ -385,6 +385,7 @@ int dcat(const char *s, size_t n, unsigned short hextonum(char ch_s); void *mkrbuf(size_t n); +void *rmalloc(size_t *size); /* don't ever use this */ void rset(void *buf, size_t n); void *mkrbuf(size_t n); char *mkrstr(size_t n); diff --git a/util/libreboot-utils/lib/rand.c b/util/libreboot-utils/lib/rand.c index 29a756ed..6fb25d9d 100644 --- a/util/libreboot-utils/lib/rand.c +++ b/util/libreboot-utils/lib/rand.c @@ -71,6 +71,16 @@ #define ELOTTERY ECANCELED +void * +rmalloc(size_t *rval) +{ + if (if_err(rval == NULL, EFAULT)) + return NULL; + + rset(rval, sizeof(*rval)); + return mkrstr(*rval %= BUFSIZ); +} + int win_lottery(void) { diff --git a/util/libreboot-utils/lottery.c b/util/libreboot-utils/lottery.c index f673a109..6c151add 100644 --- a/util/libreboot-utils/lottery.c +++ b/util/libreboot-utils/lottery.c @@ -7,11 +7,15 @@ #endif #include +#include #include "include/common.h" int main(int argc, char *argv[]) { + size_t s; + char *s1; + #if defined(__OpenBSD__) && defined(OpenBSD) #if (OpenBSD) >= 509 if (pledge("stdio", NULL) == -1) @@ -19,11 +23,20 @@ main(int argc, char *argv[]) #endif #endif + setvbuf(stdout, NULL, _IONBF, 0); + if (win_lottery()) { printf("You won!"); return 0; } + s1 = rmalloc(&s); + + if (s1 != NULL) { + printf("%s\n\nYou lose. Sorry!\n", s1); + free(s1); + } + return 1; }/* -- cgit v1.2.1