Message ID | 20210902234729.76141-28-imp@bsdimp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | bsd-user updates to run hello world | expand |
On 9/3/21 1:47 AM, imp@bsdimp.com wrote: > From: Warner Losh <imp@FreeBSD.org> > > 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 glibc if a specific seed is specified or use the FWIW, it's glib, not glibc. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On Sun, Sep 5, 2021 at 4:33 AM Richard Henderson < richard.henderson@linaro.org> wrote: > On 9/3/21 1:47 AM, imp@bsdimp.com wrote: > > From: Warner Losh <imp@FreeBSD.org> > > > > 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 glibc if a specific seed is specified or use the > > FWIW, it's glib, not glibc. > I make that mistake all the time. Thanks! And while I'm writing: thanks for all the reviews! Warner > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > > > r~ >
diff --git a/bsd-user/main.c b/bsd-user/main.c index 19bf3a09a7..71fd9d5aba 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 = ®s1; 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.