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 *mkrbuf(size_t n);
char *mkrstr(size_t n);
int win_lottery(void);
size_t rsize(void);
size_t rsize(size_t n);
/* Helper functions for command: dump
*/
+10 -52
View File
@@ -72,62 +72,20 @@
* 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 *
rmalloc(size_t *rval)
{
/* clamp rand to prevent modulo bias */
size_t limit = SIZE_MAX - (SIZE_MAX % MAX_ALLOC);
return if_err(rval == NULL, EFAULT) ?
NULL : mkrstr(*rval = rsize(BUFSIZ));
}
if (if_err(rval == NULL, EFAULT))
return NULL;
size_t
rsize(size_t n)
{
size_t rval = SIZE_MAX;
for (; rval >= SIZE_MAX - (SIZE_MAX % n); rset(&rval, sizeof(rval)));
do {
rset(rval, sizeof(*rval));
} while (*rval >= limit || *rval == 0);
return mkrstr(*rval %= MAX_ALLOC);
return rval % n;
}
char *
@@ -157,7 +115,7 @@ mkrstr(size_t n) /* emulates spkmodem-decode */
void *
mkrbuf(size_t n)
{
void *buf;
void *buf = "";
if (n == 0)
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>
*/
#ifdef __OpenBSD__
#include <sys/param.h> /* pledge(2) */
#endif
#include <stdio.h>
#include <string.h>
#include "include/common.h"
#define MAX_ALLOC (1 << 17)
static int rigged(char **s);
int
main(int argc, char *argv[])
{
int lucky;
#if defined(__OpenBSD__) && defined(OpenBSD)
#if (OpenBSD) >= 509
char *s = "You lose!";
int lucky = rigged(&s);
#ifdef __OpenBSD__
if (pledge("stdio", NULL) == -1)
err_no_cleanup(0, errno, "openbsd won it");
err_no_cleanup(0, errno, "openbsd wins");
#endif
#endif
setvbuf(stdout, NULL, _IONBF, 0);
printf("%s\n", s);
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 lucky ? EXIT_SUCCESS : EXIT_FAILURE;
return !(size[0] && size[0] == size[1] && size[0] <= MAX_ALLOC << 1 &&
s != NULL) || memcmp(*s = mkrbuf(size[0] << 1), *s + size[0],
size[0]);
}/*
( >:3 )
/| |\
/| |\ it could be you!
/ \ */