From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458875130548.7893650908578; Tue, 12 Mar 2019 23:34:35 -0700 (PDT) Received: from localhost ([127.0.0.1]:39240 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xTD-0005Hy-19 for importer@patchew.org; Wed, 13 Mar 2019 02:34:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53889) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLg-0000f2-Ur for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLd-00020W-QL for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:44 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:44559) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLb-0001z8-JO for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:40 -0400 Received: by mail-pf1-x441.google.com with SMTP id a3so646105pff.11 for ; Tue, 12 Mar 2019 23:26:35 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=H1kR7KejSOEAo4SO3V5tbV5T3KpzO83g+NoqvRJ2QWw=; b=S0zDuzdK22q4q3mWgO+5DpUFb8pbei00ekirao9yNGHgtTi/50t373vCGn7hvtUuTd tqf1qD2xPcy503eH0svjOd/oO8SeIFS9zqsz7cdmuO7uTliLPvGXZGpHntxwh+9615NS RMrItAUW4abDGgVs1Oi9fdnlcBsolNYBsNxy8IG4YKOSdEnQVQuxnfoOxmamy9e/Mxdq kGGPEAVjxTyYce/lxx0XgUqRl5PQGhMBUHeQLbnaIJW+sposFufHdAODdRmSG7D81dfi JuwTDPWxNtWIodhsveVdQ2FywUQnyx73xUBzM4EjDYnAoNyXuWw3PyAHIis5Y+qbpSaT okBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=H1kR7KejSOEAo4SO3V5tbV5T3KpzO83g+NoqvRJ2QWw=; b=M4CGVyPsf66dE3ATNWxnQHB06h0M8EyMVq1oZ6G/DdxuyL0/Kiu8g9c+laM/RC6dYg LzOpLQ5LbLxIOWL8WFPFFHe0MWobbYOB8Xfmmat4NGgyEiJ2CnyWa7OvWzyVeTHqD0fh yiRUN1RSbntHo2MwOcYQin7Ztt4+v03MB6PY9HewyvNxufx/c3FoaJeICpWNnk+8i6yf uojfogL1sIdnGmsIW8LtSI2q6SUKuK1fMYedn+I/YZvZ+clDWqcZb8EXhhAhb/AVV2mK ealQrPsk4T9z/mTTmr8cUva/6swC5noAR1/U3bW/emkwNEFXk/EWgR5BYIFtx64fFwrP LBnQ== X-Gm-Message-State: APjAAAXzYyIBpIaQBLjVQ2jynIhsQi0WJ5Gz9ZZRZRz4/o/wtzq4ZH0P VYMiPRi3f3Te/fZePloRwHn1nvMU09M= X-Google-Smtp-Source: APXvYqwBshQEPMUVzt8YsOeqnI/4LGHwAK7ZQWu8ww6PJsGYRZLImZRV7BVClXGvaxmVAinib8NHJw== X-Received: by 2002:a17:902:b416:: with SMTP id x22mr44336735plr.285.1552458393888; Tue, 12 Mar 2019 23:26:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:24 -0700 Message-Id: <20190313062630.30568-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 Subject: [Qemu-devel] [PATCH for-4.1 1/7] util: Add qemu_getrandom and support functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Initialize the system from system and linux-user arguments. Propagate deterministic seeds when creating new cpu threads. Signed-off-by: Richard Henderson --- include/qemu/random.h | 58 +++++++++++++++++++++++++++++++++ include/qom/cpu.h | 1 + cpus.c | 9 +++++ linux-user/main.c | 9 ++--- linux-user/syscall.c | 3 ++ util/random.c | 76 +++++++++++++++++++++++++++++++++++++++++++ vl.c | 4 +++ qemu-options.hx | 10 ++++++ util/Makefile.objs | 1 + 9 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 include/qemu/random.h create mode 100644 util/random.c diff --git a/include/qemu/random.h b/include/qemu/random.h new file mode 100644 index 0000000000..9d88008288 --- /dev/null +++ b/include/qemu/random.h @@ -0,0 +1,58 @@ +/* + * QEMU random functions + * + * Copyright 2019 Linaro, Ltd. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the F= ree + * Software Foundation; either version 2 of the License, or (at your optio= n) + * any later version. + */ + +#ifndef QEMU_RANDOM_H +#define QEMU_RANDOM_H + +/** + * qemu_seedrandom_main(const char *optarg, Error **errp) + * @optarg: a non-NULL pointer to a C string + * @errp: an Error handler + * + * The @optarg value is that which accompanies the -seed argument. + * This forces qemu_getrandom into deterministic mode. + */ +void qemu_seedrandom_main(const char *optarg, Error **errp); + +/** + * qemu_seedrandom_thread_part1(void) + * + * If qemu_getrandom is in deterministic mode, returns an + * independant seed for the new thread. Otherwise returns 0. + */ +uint64_t qemu_seedrandom_thread_part1(void); + +/** + * qemu_seedrandom_thread_part2(uint64_t seed) + * @seed: a value for the new thread. + * + * If qemu_getrandom is in deterministic mode, this stores an + * independant seed for the new thread. Otherwise a no-op. + */ +void qemu_seedrandom_thread_part2(uint64_t seed); + +/** + * qemu_getrandom(void *buf, size_t len, bool nonblock) + * @buf: a buffer of bytes to be written + * @len: the number of bytes in @buf + * @nonblock: do not delay if the entropy pool is low + * + * Fills len bytes in buf with random data. If nonblock is false, + * this may require a delay while the entropy pool fills. Returns + * true if the call is successful, but the only non-successful case + * is when nonblock is true. + * + * The value of len must be <=3D 256, so that the BSD getentropy(3) + * function can be used to implement this. + */ +bool qemu_getrandom(void *buf, size_t len, bool nonblock); + +#endif /* QEMU_RANDOM_H */ diff --git a/include/qom/cpu.h b/include/qom/cpu.h index 1d6099e5d4..343cc6d51e 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -372,6 +372,7 @@ struct CPUState { int singlestep_enabled; int64_t icount_budget; int64_t icount_extra; + uint64_t random_seed; sigjmp_buf jmp_env; =20 QemuMutex work_mutex; diff --git a/cpus.c b/cpus.c index e83f72b48b..b5d3f46220 100644 --- a/cpus.c +++ b/cpus.c @@ -49,6 +49,7 @@ #include "qemu/option.h" #include "qemu/bitmap.h" #include "qemu/seqlock.h" +#include "qemu/random.h" #include "tcg.h" #include "hw/nmi.h" #include "sysemu/replay.h" @@ -1275,6 +1276,7 @@ static void *qemu_kvm_cpu_thread_fn(void *arg) /* signal CPU creation */ cpu->created =3D true; qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 do { if (cpu_can_run(cpu)) { @@ -1318,6 +1320,7 @@ static void *qemu_dummy_cpu_thread_fn(void *arg) /* signal CPU creation */ cpu->created =3D true; qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 do { qemu_mutex_unlock_iothread(); @@ -1477,6 +1480,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg) cpu->created =3D true; cpu->can_do_io =3D 1; qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 /* wait for initial kick-off after machine start */ while (first_cpu->stopped) { @@ -1591,6 +1595,7 @@ static void *qemu_hax_cpu_thread_fn(void *arg) =20 hax_init_vcpu(cpu); qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 do { if (cpu_can_run(cpu)) { @@ -1630,6 +1635,7 @@ static void *qemu_hvf_cpu_thread_fn(void *arg) /* signal CPU creation */ cpu->created =3D true; qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 do { if (cpu_can_run(cpu)) { @@ -1670,6 +1676,7 @@ static void *qemu_whpx_cpu_thread_fn(void *arg) /* signal CPU creation */ cpu->created =3D true; qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 do { if (cpu_can_run(cpu)) { @@ -1723,6 +1730,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) cpu->can_do_io =3D 1; current_cpu =3D cpu; qemu_cond_signal(&qemu_cpu_cond); + qemu_seedrandom_thread_part2(cpu->random_seed); =20 /* process any pending work */ cpu->exit_request =3D 1; @@ -2070,6 +2078,7 @@ void qemu_init_vcpu(CPUState *cpu) cpu->nr_cores =3D smp_cores; cpu->nr_threads =3D smp_threads; cpu->stopped =3D true; + cpu->random_seed =3D qemu_seedrandom_thread_part1(); =20 if (!cpu->as) { /* If the target cpu hasn't set up any address spaces itself, diff --git a/linux-user/main.c b/linux-user/main.c index a0aba9cb1e..37300230f5 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -33,6 +33,7 @@ #include "tcg.h" #include "qemu/timer.h" #include "qemu/envlist.h" +#include "qemu/random.h" #include "elf.h" #include "trace/control.h" #include "target_elf.h" @@ -291,13 +292,7 @@ static void handle_arg_pagesize(const char *arg) =20 static void handle_arg_randseed(const char *arg) { - unsigned long long seed; - - if (parse_uint_full(arg, &seed, 0) !=3D 0 || seed > UINT_MAX) { - fprintf(stderr, "Invalid seed number: %s\n", arg); - exit(EXIT_FAILURE); - } - srand(seed); + qemu_seedrandom_main(arg, &error_fatal); } =20 static void handle_arg_gdb(const char *arg) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 208fd1813d..18d98f5a08 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -110,6 +110,7 @@ #include "uname.h" =20 #include "qemu.h" +#include "qemu/random.h" #include "fd-trans.h" =20 #ifndef CLONE_IO @@ -5448,6 +5449,7 @@ static void *clone_func(void *arg) put_user_u32(info->tid, info->child_tidptr); if (info->parent_tidptr) put_user_u32(info->tid, info->parent_tidptr); + qemu_seedrandom_thread_part2(cpu->random_seed); /* Enable signals. */ sigprocmask(SIG_SETMASK, &info->sigmask, NULL); /* Signal to the parent that we're ready. */ @@ -5534,6 +5536,7 @@ static int do_fork(CPUArchState *env, unsigned int fl= ags, abi_ulong newsp, initializing, so temporarily block all signals. */ sigfillset(&sigmask); sigprocmask(SIG_BLOCK, &sigmask, &info.sigmask); + cpu->random_seed =3D qemu_seedrandom_thread_part1(); =20 /* If this is our first additional thread, we need to ensure we * generate code for parallel execution and flush old translations. diff --git a/util/random.c b/util/random.c new file mode 100644 index 0000000000..ded8725a3b --- /dev/null +++ b/util/random.c @@ -0,0 +1,76 @@ +/* + * QEMU random functions + * + * Copyright 2019 Linaro, Ltd. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the F= ree + * Software Foundation; either version 2 of the License, or (at your optio= n) + * any later version. + */ + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "qemu/cutils.h" +#include "qapi/error.h" +#include "qemu/random.h" + + +/* + * While jrand48 is not technically thread safe, jrand48_r is glibc specif= ic. + * However, the only other global state are the A and C values, which are + * otherwise constant. The only way to muck with those is with lcong48(3). + * So if we don't do that, jrand48 *is* thread-safe. + */ +static __thread uint16_t xsubi[3]; + +/* Deterministic implementation using libc functions. */ +bool qemu_getrandom(void *buf, size_t len, bool nonblock) +{ + size_t i; + uint32_t val; + + g_assert_cmpuint(len, <=3D, 256); + + for (i =3D 0; i + 4 <=3D len; i +=3D 4) { + val =3D jrand48(xsubi); + __builtin_memcpy(buf + i, &val, 4); + } + if (i < len) { + val =3D jrand48(xsubi); + __builtin_memcpy(buf + i, &val, len - i); + } + + return true; +} + +uint64_t qemu_seedrandom_thread_part1(void) +{ + uint64_t ret; + qemu_getrandom(&ret, sizeof(ret), false); + return ret; +} + +void qemu_seedrandom_thread_part2(uint64_t seed) +{ + xsubi[0] =3D seed; + xsubi[1] =3D seed >> 16; + xsubi[2] =3D seed >> 32; +} + +void qemu_seedrandom_main(const char *optarg, Error **errp) +{ + unsigned long long seed; + if (parse_uint_full(optarg, &seed, 0)) { + error_setg(errp, "Invalid seed number: %s", optarg); + } else { + qemu_seedrandom_thread_part2(seed); + } +} + +static void __attribute__((constructor)) initialize(void) +{ + /* Make sure A and C parameters are initialized. */ + srand48(0); + qemu_seedrandom_thread_part2(time(NULL) + getpid() * 1500450271ull); +} diff --git a/vl.c b/vl.c index 027b853d92..5daf12f74a 100644 --- a/vl.c +++ b/vl.c @@ -128,6 +128,7 @@ int main(int argc, char **argv) #include "qapi/qapi-commands-ui.h" #include "qapi/qmp/qerror.h" #include "sysemu/iothread.h" +#include "qemu/random.h" =20 #define MAX_VIRTIO_CONSOLES 1 =20 @@ -3330,6 +3331,9 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_DFILTER: qemu_set_dfilter_ranges(optarg, &error_fatal); break; + case QEMU_OPTION_seed: + qemu_seedrandom_main(optarg, &error_fatal); + break; case QEMU_OPTION_s: add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT); break; diff --git a/qemu-options.hx b/qemu-options.hx index 8693f5fa3c..a45ae70d33 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3598,6 +3598,16 @@ the 0x200 sized block starting at 0xffffffc000080000= and another 0x1000 sized block starting at 0xffffffc00005f000. ETEXI =20 +DEF("seed", HAS_ARG, QEMU_OPTION_seed, \ + "-seed number seed the psudorandom number generator\n", + QEMU_ARCH_ALL) +STEXI +@item -seed @var{number} +@findex -seed +Force qemu to use a deterministic pseudo random number generator, +seeded with @var{number}. +ETEXI + DEF("L", HAS_ARG, QEMU_OPTION_L, \ "-L path set the directory for the BIOS, VGA BIOS and keymaps\= n", QEMU_ARCH_ALL) diff --git a/util/Makefile.objs b/util/Makefile.objs index 835fcd69e2..bc7405c535 100644 --- a/util/Makefile.objs +++ b/util/Makefile.objs @@ -53,5 +53,6 @@ util-obj-y +=3D iova-tree.o util-obj-$(CONFIG_INOTIFY1) +=3D filemonitor-inotify.o util-obj-$(CONFIG_LINUX) +=3D vfio-helpers.o util-obj-$(CONFIG_OPENGL) +=3D drm.o +util-obj-y +=3D random.o =20 stub-obj-y +=3D filemonitor-stub.o --=20 2.17.1 From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458496870610.7797989737983; Tue, 12 Mar 2019 23:28:16 -0700 (PDT) Received: from localhost ([127.0.0.1]:39170 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xN4-0001JU-Ri for importer@patchew.org; Wed, 13 Mar 2019 02:28:10 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53883) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLg-0000f0-U4 for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLd-00020I-PD for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:44 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:34005) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLb-0001zJ-2x for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:39 -0400 Received: by mail-pf1-x443.google.com with SMTP id v64so678760pfb.1 for ; Tue, 12 Mar 2019 23:26:36 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=2Mo+uQeJOvkzulvZHsMg8FatmP4cFOzNXezUkMKmYfY=; b=OSCXIJy6l0sZwBOpnRart2TJQvO2bTZbcqyYKZjcfbnQA1qFURevryu5JAdIjxNE/7 PCZeUzDKdg7dCCXcsajcanTFN3X6lzv6ZrHFgWDn+b4se8OmwmWYy8+qAl2c9HWvtuHb XvFTsTD/U+c4CJmNO+LdlGBqfDvAFMcS0vYEiwfwKRK1CUtkDJSb7eW941cBlOAeDqYx 3I8KsdSFHF+/sa5s153XgU46pdMGNohAwFVkz4lXQKNOwYlcLb2q/wF/WeieZlOeU0tR UQnL6SjaudAARg1aX+LxvvJn2zB2np/2Mvjt+Rj9pAFAbDsNriMZJkHERQUJ0QlDe8K+ Fsig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=2Mo+uQeJOvkzulvZHsMg8FatmP4cFOzNXezUkMKmYfY=; b=luvxV+8dd6jQOvTR+WdMlr1OBvA1Px6wSfljSF2XI9NkG/REQwl0HfBSPsmILddICG XEOaqOZgzCkY/6bpVd75evVyCznwH5zF7fr5WKr0vzeo7jidHYTj4OTp6wnOJ4e1m/MU KYkdf4+h0XchCg+xy6Q4+i3N3GyFKzJC1Y9gf9WvSD9kSZsbz+DkpsqBckFhGiM7YKn6 vbXBvmJPBgeNTxz9DNVjZc1eG0V++8DdQ11xJy9uBGjLPxjp9xD1x8gRq3tQCl0EN9E6 QdMvxVxJ07O5v2b3eI2H/5IC5Fjs+L4pkzyXjfij+OrxBV4q/lCgUMzT8pT1P8o533aX R5wQ== X-Gm-Message-State: APjAAAX3o09JuF+1vZrw3ElBZWiLncghZmbemaLMe852FCI3rrHLZGn/ SNT/+csDJNtX4/MTDk/BoT9r7izBqBo= X-Google-Smtp-Source: APXvYqySOKLS3eAMKUdDmpz5vfe4sfLzaiCwbu0XJIF5H6GgMyNQuWBUU4MMpxTQr3HXHORTgPRAug== X-Received: by 2002:a17:902:8d89:: with SMTP id v9mr44599962plo.254.1552458395122; Tue, 12 Mar 2019 23:26:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:25 -0700 Message-Id: <20190313062630.30568-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::443 Subject: [Qemu-devel] [PATCH for-4.1 2/7] util: Use getrandom for qemu_getrandom if available X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We only allow access to the "urandom" side of the interface, and using -seed forces the use of the deterministic algorithm. Signed-off-by: Richard Henderson --- util/random.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++----- configure | 18 +++++++++++- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/util/random.c b/util/random.c index ded8725a3b..833169fad5 100644 --- a/util/random.c +++ b/util/random.c @@ -15,6 +15,13 @@ #include "qapi/error.h" #include "qemu/random.h" =20 +#ifdef CONFIG_GETRANDOM +# include +static bool deterministic; +#else +#define deterministic true +#endif + =20 /* * While jrand48 is not technically thread safe, jrand48_r is glibc specif= ic. @@ -25,13 +32,11 @@ static __thread uint16_t xsubi[3]; =20 /* Deterministic implementation using libc functions. */ -bool qemu_getrandom(void *buf, size_t len, bool nonblock) +static bool do_jrand48(void *buf, size_t len, bool nonblock) { size_t i; uint32_t val; =20 - g_assert_cmpuint(len, <=3D, 256); - for (i =3D 0; i + 4 <=3D len; i +=3D 4) { val =3D jrand48(xsubi); __builtin_memcpy(buf + i, &val, 4); @@ -44,18 +49,63 @@ bool qemu_getrandom(void *buf, size_t len, bool nonbloc= k) return true; } =20 +#ifdef CONFIG_GETRANDOM +static bool do_getrandom(void *buf, size_t len, bool nonblock) +{ + while (len !=3D 0) { + ssize_t ret =3D getrandom(buf, len, nonblock ? GRND_NONBLOCK : 0); + if (unlikely(ret < 0)) { + switch (errno) { + case EAGAIN: + /* Only returned for GRND_NONBLOCK. */ + return false; + case EINTR: + /* Signal. Just try again. */ + break; + default: + /* EFAULT or EINVAL; either a bug in the user or here. */ + g_assert_not_reached(); + } + } else { + len -=3D ret; + buf +=3D ret; + } + } + return true; +} +#endif + +bool qemu_getrandom(void *buf, size_t len, bool nonblock) +{ + /* Assert the interface contract is honored. */ + g_assert_cmpuint(len, <=3D, 256); + + if (!deterministic) { +#ifdef CONFIG_GETRANDOM + return do_getrandom(buf, len, nonblock); +#endif + } + return do_jrand48(buf, len, nonblock); +} + uint64_t qemu_seedrandom_thread_part1(void) { uint64_t ret; - qemu_getrandom(&ret, sizeof(ret), false); + if (deterministic) { + qemu_getrandom(&ret, sizeof(ret), false); + } else { + ret =3D 0; + } return ret; } =20 void qemu_seedrandom_thread_part2(uint64_t seed) { - xsubi[0] =3D seed; - xsubi[1] =3D seed >> 16; - xsubi[2] =3D seed >> 32; + if (deterministic) { + xsubi[0] =3D seed; + xsubi[1] =3D seed >> 16; + xsubi[2] =3D seed >> 32; + } } =20 void qemu_seedrandom_main(const char *optarg, Error **errp) @@ -64,6 +114,9 @@ void qemu_seedrandom_main(const char *optarg, Error **er= rp) if (parse_uint_full(optarg, &seed, 0)) { error_setg(errp, "Invalid seed number: %s", optarg); } else { +#ifndef deterministic + deterministic =3D true; +#endif qemu_seedrandom_thread_part2(seed); } } @@ -72,5 +125,16 @@ static void __attribute__((constructor)) initialize(voi= d) { /* Make sure A and C parameters are initialized. */ srand48(0); + +#ifdef CONFIG_GETRANDOM + /* Make sure support exists within the running kernel. */ + errno =3D 0; + if (getrandom(NULL, 0, 0) =3D=3D 0) { + return; + } + g_assert_cmpint(errno, =3D=3D, ENOSYS); + deterministic =3D true; +#endif + qemu_seedrandom_thread_part2(time(NULL) + getpid() * 1500450271ull); } diff --git a/configure b/configure index cab830a4c9..22c7944e38 100755 --- a/configure +++ b/configure @@ -5700,6 +5700,20 @@ if compile_prog "" "" ; then have_utmpx=3Dyes fi =20 +########################################## +# check for getrandom() + +have_getrandom=3Dno +cat > $TMPC << EOF +#include +int main(void) { + return getrandom(0, 0, GRND_NONBLOCK); +} +EOF +if compile_prog "" "" ; then + have_getrandom=3Dyes +fi + ########################################## # checks for sanitizers =20 @@ -7073,7 +7087,9 @@ fi if test "$have_utmpx" =3D "yes" ; then echo "HAVE_UTMPX=3Dy" >> $config_host_mak fi - +if test "$have_getrandom" =3D "yes" ; then + echo "CONFIG_GETRANDOM=3Dy" >> $config_host_mak +fi if test "$ivshmem" =3D "yes" ; then echo "CONFIG_IVSHMEM=3Dy" >> $config_host_mak fi --=20 2.17.1 From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458797471755.6977538133223; Tue, 12 Mar 2019 23:33:17 -0700 (PDT) Received: from localhost ([127.0.0.1]:39234 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xRt-0004cY-He for importer@patchew.org; Wed, 13 Mar 2019 02:33:09 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53915) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLi-0000fi-2b for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLg-000211-UR for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:45 -0400 Received: from mail-pf1-x442.google.com ([2607:f8b0:4864:20::442]:41148) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLd-0001zV-Qk for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:42 -0400 Received: by mail-pf1-x442.google.com with SMTP id d25so655910pfn.8 for ; Tue, 12 Mar 2019 23:26:37 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CRrzqIjVEmnH35vuK6IV8EUSMF7zJvww1HBvBe97Ku4=; b=rcLdNjoVIFH1g8WiIkvbj+zNp7Ux9iXWfNyq8aL69cL517Jr/hTLmCz3e9GEbxQps9 a/V9dDc2mMt5Mw727KPVM8ZUcgKcFG3vr4Ng3VrsOyaqZcky6Vqt9yS7bgpuPFrgX6hn Jweauj+3uY4V3Aa28hp8yEW6WsKXSRBllCskxIDmg9tSEprXKBwj26rgbzpYKiJjFjSB xZy2JI4pfCWIxp3j4hNqXhtxCM7S8RFQW3bd08buctR3zxO6iP8ftaPHSDMMSpelTKd/ Kan4nOMwszEbNtXePbliuHECm+iaEryKGa5BoAGTJQIOtoLY2OZwlyVq8pgn87I5DySc DRfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CRrzqIjVEmnH35vuK6IV8EUSMF7zJvww1HBvBe97Ku4=; b=RG7l3IsLoHtlPL+huEijJ6PoXA1P/NmpFaUGhTloS3Jvg55U30H3sXfR7Lz1mrwfkA y7WE5f+n3W8D9qRNsFHPsTKC2YIiLHnLoTY0oE0GxgX07XKXvSK/0TFpBxxOsVPqai54 DnlpC4x/SrXHIbJX5DXh4i1eWrQMDRVqBAkRmTMuk9DJOKnHsnUlNvBcp7zNoperUog4 WamMfM9uPTmmuhjeMEddU7H3QVCP7Ls43n/oO9kdBfp9vKg/ksA+u/4KanefVIxmb9Ye 1QkOr+2LLA5EW7rLfEBq8ueg3V/nn2fVlsITO8wNW9uStOyPm1OpinDAzhy3d3pyv4zP gkVg== X-Gm-Message-State: APjAAAXULbYuSOVsY+XWzcno+dyoemhcIahfGdtQu+PiLriaaGyZN/j5 b1j5QSQRA97T3c+KVKJ6Tf+1eJYuGto= X-Google-Smtp-Source: APXvYqzQQ6BbY8F1BVAv4c479MBJ2bZu3F8gsPqiPl3bxkfVO64OsHnVUnaaDOBg0Mtv7c2bxK+nLw== X-Received: by 2002:a63:6605:: with SMTP id a5mr38836091pgc.372.1552458396294; Tue, 12 Mar 2019 23:26:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:26 -0700 Message-Id: <20190313062630.30568-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::442 Subject: [Qemu-devel] [PATCH for-4.1 3/7] linux-user: Use qemu_getrandom for AT_RANDOM X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use a better interface for random numbers than rand * 16. Signed-off-by: Richard Henderson --- linux-user/elfload.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index c1a26021f8..f33bf4fb85 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -7,6 +7,7 @@ #include "qemu.h" #include "disas/disas.h" #include "qemu/path.h" +#include "qemu/random.h" =20 #ifdef _ARCH_PPC64 #undef ARCH_DLINFO @@ -1883,12 +1884,9 @@ static abi_ulong create_elf_tables(abi_ulong p, int = argc, int envc, } =20 /* - * Generate 16 random bytes for userspace PRNG seeding (not - * cryptically secure but it's not the aim of QEMU). + * Generate 16 random bytes for userspace PRNG seeding. */ - for (i =3D 0; i < 16; i++) { - k_rand_bytes[i] =3D rand(); - } + qemu_getrandom(k_rand_bytes, sizeof(k_rand_bytes), false); if (STACK_GROWS_DOWN) { sp -=3D 16; u_rand_bytes =3D sp; --=20 2.17.1 From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458571296955.1360100451644; Tue, 12 Mar 2019 23:29:31 -0700 (PDT) Received: from localhost ([127.0.0.1]:39180 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xOK-00029p-9B for importer@patchew.org; Wed, 13 Mar 2019 02:29:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53884) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLg-0000f1-UD for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLd-00020O-Ph for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:44 -0400 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:45424) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLb-0001zb-2y for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:40 -0400 Received: by mail-pg1-x543.google.com with SMTP id 125so770710pgc.12 for ; Tue, 12 Mar 2019 23:26:38 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gpelhTrFHIRILhcge+m6UkRTeSiVlbqBCdoqAwCZgvk=; b=UJUiu3MjA//pbGAQqYY3Hhn1Bj/L3YPaBdYg1kaOQqB9hF7OvaeUgTFTDByKdPNcxL bc6Q1dE6z+u2xsUCtFNFMTtQpH07pYyc8KcSTImqAU0QoUPX2zFcqEVnQqJksF6QJo38 SDEUsA/ds6UuEj8sHx15IN2dZsFmM0qTce8flhmWb2KzsoaW350EgUgt9rPgg0J4/Zv+ 3AGV5TgYKLJhAN/CUj4HUrrDU5oC73lqLxVW1gy0I0CUPpqlqH801l4/NmB2HTU09l9J lxl+X7JbvERkQcnfjBrnbP6ht3BJg9D+R8+T3uA2+fuT365eX6YhS1r/hHbgJi36NcFZ E9gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gpelhTrFHIRILhcge+m6UkRTeSiVlbqBCdoqAwCZgvk=; b=LhZkFjg8OIvra2faMLDlgEyr8y725ArJQnkenA+VlmHvpOFpHp9/Bn5Ut/0fV1Sjx5 aDCwu+bsUN4xWRM4l53RxZ305sJTtuh/n9QRIPQ8SJk/cJdJUTvhK2vHPtdh5OnV/Jgb xB9HqIoTXug9fYnsYHBsfRnJgEMQpjrwcSoyUbfhiR5EQKR3WdiIdhZ4KETk9uVFvpFD 702QeDKSIZx+9XFZ9gAXGhzmL//naKGN0y7nKsyzmsq0X58VrWaGgaUcMMjm/Ma1pmaM 6fNeT+pqYzzb7kDyWD6ZENMP2I0w1/rMK4rgwJcr6xjJGFJarNI+gv3KKojj/QyjTpp7 3BXg== X-Gm-Message-State: APjAAAWSRs+oxG0on6aHTqVLVHMrLHFfrevPjreotrW9buODKJHSO5Yf PDACO3B/zCyZ8rqaG3oDdOh0n5iuPF4= X-Google-Smtp-Source: APXvYqxNA2RIxbsfqfi5e5dTeZK//SXbhJy5DEqrYEUHkAntVKeoboppZnqdOYplolxWpCkYFkZA/w== X-Received: by 2002:a17:902:8203:: with SMTP id x3mr43823533pln.159.1552458397416; Tue, 12 Mar 2019 23:26:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:27 -0700 Message-Id: <20190313062630.30568-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::543 Subject: [Qemu-devel] [PATCH for-4.1 4/7] linux-user/aarch64: Use qemu_getrandom for arm_init_pauth_key X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use a better interface for random numbers than rand * 3. Signed-off-by: Richard Henderson --- linux-user/aarch64/cpu_loop.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index d75fd9d3e2..ad30cab52d 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -20,6 +20,7 @@ #include "qemu/osdep.h" #include "qemu.h" #include "cpu_loop-common.h" +#include "qemu/random.h" =20 #define get_user_code_u32(x, gaddr, env) \ ({ abi_long __r =3D get_user_u32((x), (gaddr)); \ @@ -147,22 +148,9 @@ void cpu_loop(CPUARMState *env) } } =20 -static uint64_t arm_rand64(void) -{ - int shift =3D 64 - clz64(RAND_MAX); - int i, n =3D 64 / shift + (64 % shift !=3D 0); - uint64_t ret =3D 0; - - for (i =3D 0; i < n; i++) { - ret =3D (ret << shift) | rand(); - } - return ret; -} - void arm_init_pauth_key(ARMPACKey *key) { - key->lo =3D arm_rand64(); - key->hi =3D arm_rand64(); + qemu_getrandom(key, sizeof(*key), false); } =20 void target_cpu_copy_regs(CPUArchState *env, struct target_pt_regs *regs) --=20 2.17.1 From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458683937944.4654429420104; Tue, 12 Mar 2019 23:31:23 -0700 (PDT) Received: from localhost ([127.0.0.1]:39224 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xQ8-0003VO-VU for importer@patchew.org; Wed, 13 Mar 2019 02:31:20 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLi-0000fh-2I for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLg-000218-VD for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:45 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:43183) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLd-0001zt-RD for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:44 -0400 Received: by mail-pg1-x536.google.com with SMTP id l11so776692pgq.10 for ; Tue, 12 Mar 2019 23:26:39 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6eyH2FF7eLIJ4cGxJdoLLGwUA9HamRNHz//ATv6/MHk=; b=WB20gWP0BAwNJzVgLNB2AJ+TD98XeL01dvXwWFvVD6LnmbnRcU6Db0WkCVeTxx+j11 Efjz3IQNVAh39Gp/wBS/42zVzUBZhKcsqfRofYsa3V3xZQks/ejHMjFF43QxNaBlU5eU 3bDfnjIdj3HiQ/912VRIFjs3D7cVf7EXOBUkhqjN5uqhadsaJQot0t3kQPbXA5El1fjG TwSKMIeLHNBkkr/acxp74wQvB04Svym93hJpfUwOxuN6hiUX4eSrfvzTGIQxx9JMBrqA JcHcUpT/h2tF46v3V+PYIUFPfLhI7IzmMZobPzh3ny6oL1GofKGFKmQuh2e5wu0f9q84 ItkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6eyH2FF7eLIJ4cGxJdoLLGwUA9HamRNHz//ATv6/MHk=; b=OavbbvA8ZmdBbcpCI89+7k323Z8mjqlc5/ssX9hnxYdwmWmX5aV8HGBJaPUKlRP7iZ O1O1sfhMzbGZlaR6EXMmnXrEpoizvz6hfZt1kt8qpfpCQG7StkzowAUAjdJmR/ZaAuXV 9R9reJ6/K+mJ2ueW5UcOUZPgTHVZX4H58NKDl/9XxpAl7+L1/fEx+RMnWgSUW7OL6aS9 SiuOqiVQuVH76+5kcvN4sVf3prb+GR7sGcRLgs+keopj3K8w0vjSS/R2J3Q6WaxRcdlq A0NTAZQzXzzLY3EPhctsH40O7LKteRAlIjWbpjgdt/+xye/ISovOVKszhwiRMlOGf3uo B7Gw== X-Gm-Message-State: APjAAAXP6PHjHHXlXugGTfhNwT6DSM0w28VfCf1Vf7xFkJteCMsgFBev 82ZsUhGfPXKZtTUkYdTO/h0ZkgOaw7c= X-Google-Smtp-Source: APXvYqzdAQxvJ8+UObnYD2AodIdDGzzNpICjNjeNeSC/lJrbkd5xxtFLmZ+x5U1h8825NmexavHbYw== X-Received: by 2002:a17:902:361:: with SMTP id 88mr44235425pld.78.1552458398515; Tue, 12 Mar 2019 23:26:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:28 -0700 Message-Id: <20190313062630.30568-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::536 Subject: [Qemu-devel] [PATCH for-4.1 5/7] linux-user: Remove srand call X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We no longer use rand() within linux-user. Signed-off-by: Richard Henderson --- linux-user/main.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/linux-user/main.c b/linux-user/main.c index 37300230f5..7a40a14c6a 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -619,8 +619,6 @@ int main(int argc, char **argv, char **envp) =20 cpu_model =3D NULL; =20 - srand(time(NULL)); - qemu_add_opts(&qemu_trace_opts); =20 optind =3D parse_args(argc, argv); --=20 2.17.1 From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458954295365.56817175409844; Tue, 12 Mar 2019 23:35:54 -0700 (PDT) Received: from localhost ([127.0.0.1]:39278 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xUS-00062X-Bb for importer@patchew.org; Wed, 13 Mar 2019 02:35:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53951) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLm-0000hp-GM for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLk-00022F-Lk for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:50 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:41151) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLi-000201-5M for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:46 -0400 Received: by mail-pf1-x444.google.com with SMTP id d25so656017pfn.8 for ; Tue, 12 Mar 2019 23:26:41 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=URg26ke8pptD4/rvcTYVkJk/irN25dGRogOZ9l3dOw0=; b=dS3FAoHELYL2MV7G8GTDTECXtKyskTPhm7ft1GWJOmlWOIQDNn6jJSCfiRbMslmTLC M78c5niYkIWlgclhWl8FwbIvdKSJIAU54Q9YQoNO+z+K0qQYqmDlknryBn/FyRGKyrUH Ep1C9cZ98DAjndiJ/HumttR/4BZZnUqQyWJR5OTkfzmk8aYvP5Vo0nRS042feD7/yGD7 PDYls+zQTRyYq1/nBhsQ+AtQby9R3N0AyHJuvxnQ3zYrNwlRFO7ID2iaPit5cEq5AG9n e9wP7XL8KSLwrn6G3cR5tZ3hBQHnkCp1JFfK5NdjWinruCBacnDcB9n+wpAeDOzdaxSd qBXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=URg26ke8pptD4/rvcTYVkJk/irN25dGRogOZ9l3dOw0=; b=eMdKg0p99fdmhp19GphDs+fjOblTjqDT3jYE4pZdQxj/y+roAbucpIygUs8fdtEkm/ OOMP1r8mYgC+Z6GOjiZJ/o0itvg7AgAAfY/Nnd0udojxCACAwft79A71ABUChxiipM3U RKnXsG/pS8jPjnVRZNY6+zOX6OmphHBtjG1JYBhb1TfnZDNXr3Xle3bqqXe6suF2oepx qShOxxYqowA6GrzGl+bfJgQU5FTduUEt3NPrBnHFiJpAIq5Eka6dPs5piobQ4bVCkubm QN9Ck8H/3s2AryiABYT/MlxS/gFNQccZQPvksuaoPX6Q2dZtqEeyJl754cAmfFAM/KX1 mv8g== X-Gm-Message-State: APjAAAUb4MAqfhZnSME+Uo/Y6yt8EPZq6icCZ1ewYFaUXyGoTawnuQI4 RwCdECdkMaN10eGcUzcVaaZ4kJYw/5k= X-Google-Smtp-Source: APXvYqxoMzTtJjqDQrCtmpeLZxrDsR7PBd9ua6fwereVu7vyNg1nNoZhkUo9mW4mBk5/h2jaAjm5Hw== X-Received: by 2002:a63:fd03:: with SMTP id d3mr38012133pgh.359.1552458399765; Tue, 12 Mar 2019 23:26:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:29 -0700 Message-Id: <20190313062630.30568-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 Subject: [Qemu-devel] [PATCH for-4.1 6/7] ui/vnc: Use qemu_getrandom for make_challenge X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use a better interface for random numbers than rand, plus some useless floating point arithmetic. Signed-off-by: Richard Henderson Reviewed-by: Gerd Hoffmann --- ui/vnc.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index 1871422e1d..cbdfa37c52 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -46,6 +46,7 @@ #include "qom/object_interfaces.h" #include "qemu/cutils.h" #include "io/dns-resolver.h" +#include "qemu/random.h" =20 #define VNC_REFRESH_INTERVAL_BASE GUI_REFRESH_INTERVAL_DEFAULT #define VNC_REFRESH_INTERVAL_INC 50 @@ -2537,12 +2538,7 @@ void start_client_init(VncState *vs) =20 static void make_challenge(VncState *vs) { - int i; - - srand(time(NULL)+getpid()+getpid()*987654+rand()); - - for (i =3D 0 ; i < sizeof(vs->challenge) ; i++) - vs->challenge[i] =3D (int) (256.0*rand()/(RAND_MAX+1.0)); + qemu_getrandom(vs->challenge, sizeof(vs->challenge), false); } =20 static int protocol_client_auth_vnc(VncState *vs, uint8_t *data, size_t le= n) --=20 2.17.1 From nobody Sun Nov 9 23:46:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552458721364723.5940141424575; Tue, 12 Mar 2019 23:32:01 -0700 (PDT) Received: from localhost ([127.0.0.1]:39226 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xQm-0003sG-Bz for importer@patchew.org; Wed, 13 Mar 2019 02:32:00 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53945) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h3xLk-0000hT-LI for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h3xLi-00021p-4v for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:47 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:43162) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h3xLg-00020S-TW for qemu-devel@nongnu.org; Wed, 13 Mar 2019 02:26:45 -0400 Received: by mail-pg1-x542.google.com with SMTP id l11so776770pgq.10 for ; Tue, 12 Mar 2019 23:26:42 -0700 (PDT) Received: from localhost.localdomain (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id m64sm25593889pfi.149.2019.03.12.23.26.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 23:26:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8ejONeoCzadNPUYlAxbfn+jA7CyP4F1IWrm2q1c5QP0=; b=oN5wkKZqD0fvF9x65sX6QPI+B7vDpOFru4ra3fiMqAAehA+8tZmzEwYnh25dAFFBa3 I5UhXUprlSaRE0hfLpNNm+ycev2GgFsBDWObqbZ40CiaIuefqSVq+1p7PJ+/glVi21D5 tWelcGYPLEeUE2PyuxECJYWQ62XmFMcDs0aaAOgP1GxyrnSBriKZeEQnc12qyuwKXSC7 t9Qyl5SWDFE5HnZ3IB1A7My/giE5DmPHVuS2HD/cstKNajmPfXgsx6WDtl/y8sFQbwOl RWyjzJg4WpTGIvCVa7knqA/rQf75VDtidioRKK5rPBR/Rbx1R4RVVXB06Zv7xYSl48c+ AY0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8ejONeoCzadNPUYlAxbfn+jA7CyP4F1IWrm2q1c5QP0=; b=Ns2pRukoGrLXLhEc9/2yeM9fTfzplvDgBnGFU6Qsxmi7l+ciThI7GcFVnc0V2YG4rf ZHMu9eQTEte8OsLop5Cp/OmDykRp3QzfDS1oQwbJNsyjyVcSsDn8RS7tgy6qOz7zFheK HFlX4zAizeVhEfLSAjqW/LoZarhogZCE1xEjq+K+dfs0CqkaY0NJ0WfzBJEj/mqi61EZ onJtg264WFef4c7DDulMGZnEzE2AM7GhRTGTVLuMitEed4Mh84ztKClJsyAIHeE9nnEJ u8wOylaYow0mIHHr+JEq0VSpUcQJ3j8Lqy0nfXAUA0pX7trWqtX2aaxrkWrOM8pFYlbz ITvA== X-Gm-Message-State: APjAAAXBnwtj//2+PlSIdEVaEry3o6F2c7ZQIXlFTdSo9oR1Dx7mLn8Z CfSYWVyBC8c62KVaRJy1iRkSYBp3voY= X-Google-Smtp-Source: APXvYqyL6LBcACbPU8wwrgAaj5z15+zZuPNU4B6P9bTMQulEknCzj1GCXoFYsDKngpHHzxCaLuqCUg== X-Received: by 2002:aa7:8c13:: with SMTP id c19mr6053062pfd.247.1552458400890; Tue, 12 Mar 2019 23:26:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 12 Mar 2019 23:26:30 -0700 Message-Id: <20190313062630.30568-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190313062630.30568-1-richard.henderson@linaro.org> References: <20190313062630.30568-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH for-4.1 7/7] target/arm: Implement ARMv8.5-RNG X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, david@redhat.com, laurent@vivier.eu, armbru@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/cpu.h | 5 +++++ target/arm/cpu64.c | 1 + target/arm/helper.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 5f23c62132..aaa9e02e78 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3441,6 +3441,11 @@ static inline bool isar_feature_aa64_condm_5(const A= RMISARegisters *id) return FIELD_EX64(id->id_aa64isar0, ID_AA64ISAR0, TS) >=3D 2; } =20 +static inline bool isar_feature_aa64_rndr(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64isar0, ID_AA64ISAR0, RNDR) !=3D 0; +} + static inline bool isar_feature_aa64_jscvt(const ARMISARegisters *id) { return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, JSCVT) !=3D 0; diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 228906f267..835f73cceb 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -310,6 +310,7 @@ static void aarch64_max_initfn(Object *obj) t =3D FIELD_DP64(t, ID_AA64ISAR0, DP, 1); t =3D FIELD_DP64(t, ID_AA64ISAR0, FHM, 1); t =3D FIELD_DP64(t, ID_AA64ISAR0, TS, 2); /* v8.5-CondM */ + t =3D FIELD_DP64(t, ID_AA64ISAR0, RNDR, 1); cpu->isar.id_aa64isar0 =3D t; =20 t =3D cpu->isar.id_aa64isar1; diff --git a/target/arm/helper.c b/target/arm/helper.c index 2607d39ad1..3fe7dc8719 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -20,6 +20,7 @@ #include "fpu/softfloat.h" #include "qemu/range.h" #include "qapi/qapi-commands-target.h" +#include "qemu/random.h" =20 #define ARM_CPU_FREQ 1000000000 /* FIXME: 1 GHz, should be configurable */ =20 @@ -5717,6 +5718,34 @@ static const ARMCPRegInfo pauth_reginfo[] =3D { .fieldoffset =3D offsetof(CPUARMState, apib_key.hi) }, REGINFO_SENTINEL }; + +static uint64_t rndr_readfn(CPUARMState *env, const ARMCPRegInfo *ri) +{ + uint64_t ret; + + /* Success sets NZCV =3D 0000. */ + env->NF =3D env->CF =3D env->VF =3D 0, env->ZF =3D 1; + if (likely(qemu_getrandom(&ret, sizeof(ret), true))) { + return ret; + } + + /* Failure sets Z =3D 1 and returns 0. */ + env->ZF =3D 0; + return 0; +} + +/* We do not support re-seeding, so the two registers operate the same. */ +static const ARMCPRegInfo rndr_reginfo[] =3D { + { .name =3D "RNDR", .state =3D ARM_CP_STATE_AA64, + .type =3D ARM_CP_NO_RAW | ARM_CP_SUPPRESS_TB_END, + .opc0 =3D 3, .opc1 =3D 3, .crn =3D 2, .crm =3D 4, .opc2 =3D 0, + .access =3D PL0_R, .readfn =3D rndr_readfn }, + { .name =3D "RNDRRS", .state =3D ARM_CP_STATE_AA64, + .type =3D ARM_CP_NO_RAW | ARM_CP_SUPPRESS_TB_END, + .opc0 =3D 3, .opc1 =3D 3, .crn =3D 2, .crm =3D 4, .opc2 =3D 1, + .access =3D PL0_R, .readfn =3D rndr_readfn }, + REGINFO_SENTINEL +}; #endif =20 static CPAccessResult access_predinv(CPUARMState *env, const ARMCPRegInfo = *ri, @@ -6661,6 +6690,9 @@ void register_cp_regs_for_features(ARMCPU *cpu) if (cpu_isar_feature(aa64_pauth, cpu)) { define_arm_cp_regs(cpu, pauth_reginfo); } + if (cpu_isar_feature(aa64_rndr, cpu)) { + define_arm_cp_regs(cpu, rndr_reginfo); + } #endif =20 /* --=20 2.17.1