[PATCH v3 27/43] bsd-user: Implement --seed and initialize random state

imp@bsdimp.com posted 43 patches 4 years, 5 months ago
Maintainers: Warner Losh <imp@bsdimp.com>, Kyle Evans <kevans@freebsd.org>
[PATCH v3 27/43] bsd-user: Implement --seed and initialize random state
Posted by imp@bsdimp.com 4 years, 5 months ago
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
qcrypto library if not.

Signed-off-by: Warner Losh <imp@bsdimp.com>
---
 bsd-user/main.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

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 = &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.
-- 
2.32.0


Re: [PATCH v3 27/43] bsd-user: Implement --seed and initialize random state
Posted by Richard Henderson 4 years, 5 months ago
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~

Re: [PATCH v3 27/43] bsd-user: Implement --seed and initialize random state
Posted by Warner Losh 4 years, 5 months ago
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~
>