aboutsummaryrefslogtreecommitdiff
path: root/bsd-user/main.c
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2021-09-02 16:52:45 -0600
committerWarner Losh <imp@bsdimp.com>2021-09-10 14:13:06 -0600
commit03ecf078fab7b3ce6fdd373a902211918efeab89 (patch)
treefad431f9c3c5b0559181f7efc540e1cf2b470add /bsd-user/main.c
parent790baacc63c1cb29bfc3bf0755f49ca73a348eae (diff)
downloadqemu-03ecf078fab7b3ce6fdd373a902211918efeab89.zip
qemu-03ecf078fab7b3ce6fdd373a902211918efeab89.tar.gz
qemu-03ecf078fab7b3ce6fdd373a902211918efeab89.tar.bz2
bsd-user: Implement --seed and initialize random state
Copy --seed implementation (translated from linux-user's newer command line scheme to the older one bsd-user still uses). Initialize the randomness with the glib if a specific seed is specified or use the qcrypto library if not. Signed-off-by: Warner Losh <imp@bsdimp.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'bsd-user/main.c')
-rw-r--r--bsd-user/main.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/bsd-user/main.c b/bsd-user/main.c
index 19bf3a0..71fd9d5 100644
--- a/bsd-user/main.c
+++ b/bsd-user/main.c
@@ -45,6 +45,8 @@
#include "qemu/cutils.h"
#include "exec/log.h"
#include "trace/control.h"
+#include "crypto/init.h"
+#include "qemu/guest-random.h"
#include "host-os.h"
#include "target_arch_cpu.h"
@@ -203,6 +205,7 @@ int main(int argc, char **argv)
const char *cpu_type;
const char *log_file = NULL;
const char *log_mask = NULL;
+ const char *seed_optarg = NULL;
struct target_pt_regs regs1, *regs = &regs1;
struct image_info info1, *info = &info1;
struct bsd_binprm bprm;
@@ -331,6 +334,8 @@ int main(int argc, char **argv)
usage();
}
optind++;
+ } else if (!strcmp(r, "seed")) {
+ seed_optarg = optarg;
} else if (!strcmp(r, "singlestep")) {
singlestep = 1;
} else if (!strcmp(r, "strace")) {
@@ -403,6 +408,19 @@ int main(int argc, char **argv)
target_environ = envlist_to_environ(envlist, NULL);
envlist_free(envlist);
+ {
+ Error *err = NULL;
+ if (seed_optarg != NULL) {
+ qemu_guest_random_seed_main(seed_optarg, &err);
+ } else {
+ qcrypto_init(&err);
+ }
+ if (err) {
+ error_reportf_err(err, "cannot initialize crypto: ");
+ exit(1);
+ }
+ }
+
/*
* Now that page sizes are configured we can do
* proper page alignment for guest_base.