further cleanup

Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
Leah Rowe
2026-03-26 11:41:37 +00:00
parent 10ecf32e33
commit d1ba9bae03
3 changed files with 32 additions and 68 deletions
+1 -2
View File
@@ -391,8 +391,7 @@ void *rmalloc(size_t *size); /* don't ever use this */
void rset(void *buf, size_t n); void rset(void *buf, size_t n);
void *mkrbuf(size_t n); void *mkrbuf(size_t n);
char *mkrstr(size_t n); char *mkrstr(size_t n);
int win_lottery(void); size_t rsize(size_t n);
size_t rsize(void);
/* Helper functions for command: dump /* Helper functions for command: dump
*/ */
+10 -52
View File
@@ -72,62 +72,20 @@
* or your program dies. * or your program dies.
*/ */
#define MAX_ALLOC (2 << 16)
int
win_lottery(void) /* are u lucky? */
{
size_t size = rsize();
size_t size2 = rsize();
char *s = NULL;
if (size &&
size == size2 &&
size <= MAX_ALLOC << 1) {
if (!memcmp(s = mkrbuf(size << 1),
s + size, size))
size2 = 1; /* winner! */
else
size2 = 0;
} else {
return 0;
}
free_if_null(&s);
return (int)size2;
}
size_t
rsize(void)
{
size_t rval = 0;
/* clamp rand to prevent modulo bias */
size_t limit = SIZE_MAX - (SIZE_MAX % MAX_ALLOC);
do {
rset(&rval, sizeof(rval));
} while (rval >= limit);
return rval % MAX_ALLOC;
}
void * void *
rmalloc(size_t *rval) rmalloc(size_t *rval)
{ {
/* clamp rand to prevent modulo bias */ return if_err(rval == NULL, EFAULT) ?
size_t limit = SIZE_MAX - (SIZE_MAX % MAX_ALLOC); NULL : mkrstr(*rval = rsize(BUFSIZ));
}
if (if_err(rval == NULL, EFAULT)) size_t
return NULL; rsize(size_t n)
{
size_t rval = SIZE_MAX;
for (; rval >= SIZE_MAX - (SIZE_MAX % n); rset(&rval, sizeof(rval)));
do { return rval % n;
rset(rval, sizeof(*rval));
} while (*rval >= limit || *rval == 0);
return mkrstr(*rval %= MAX_ALLOC);
} }
char * char *
@@ -157,7 +115,7 @@ mkrstr(size_t n) /* emulates spkmodem-decode */
void * void *
mkrbuf(size_t n) mkrbuf(size_t n)
{ {
void *buf; void *buf = "";
if (n == 0) if (n == 0)
err_no_cleanup(0, EPERM, "mkrbuf: zero-byte request"); err_no_cleanup(0, EPERM, "mkrbuf: zero-byte request");
+21 -14
View File
@@ -2,31 +2,38 @@
* Copyright (c) 2026 Leah Rowe <leah@libreboot.org> * Copyright (c) 2026 Leah Rowe <leah@libreboot.org>
*/ */
#ifdef __OpenBSD__
#include <sys/param.h> /* pledge(2) */
#endif
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include "include/common.h" #include "include/common.h"
#define MAX_ALLOC (1 << 17)
static int rigged(char **s);
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
int lucky; char *s = "You lose!";
#if defined(__OpenBSD__) && defined(OpenBSD) int lucky = rigged(&s);
#if (OpenBSD) >= 509
#ifdef __OpenBSD__
if (pledge("stdio", NULL) == -1) if (pledge("stdio", NULL) == -1)
err_no_cleanup(0, errno, "openbsd won it"); err_no_cleanup(0, errno, "openbsd wins");
#endif #endif
#endif printf("%s\n", s);
setvbuf(stdout, NULL, _IONBF, 0); return lucky;
}
lucky = win_lottery(); static int
rigged(char **s) /* are u lucky? */
{
size_t size[2] = { rsize(MAX_ALLOC), rsize(MAX_ALLOC) };
printf("%s\n", lucky ? "You won!" : "You lose! Sorry!"); return !(size[0] && size[0] == size[1] && size[0] <= MAX_ALLOC << 1 &&
return lucky ? EXIT_SUCCESS : EXIT_FAILURE; s != NULL) || memcmp(*s = mkrbuf(size[0] << 1), *s + size[0],
size[0]);
}/* }/*
( >:3 ) ( >:3 )
/| |\ /| |\ it could be you!
/ \ */ / \ */