From: Laurent Vivier <lvivier@redhat.com> To: qemu-devel@nongnu.org Cc: "Laurent Vivier" <lvivier@redhat.com>, "Daniel P . Berrangé" <berrange@redhat.com>, "Kashyap Chamarthy" <kchamart@redhat.com>, "Amit Shah" <amit@kernel.org>, "Richard Henderson" <richard.henderson@linaro.org>, "Richard W . M . Jones" <rjones@redhat.com>, "Markus Armbruster" <armbru@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com> Subject: [Qemu-devel] [PATCH v8 1/3] rng-builtin: add an RNG backend that uses qemu_guest_getrandom() Date: Tue, 20 Aug 2019 18:06:13 +0200 [thread overview] Message-ID: <20190820160615.14616-2-lvivier@redhat.com> (raw) In-Reply-To: <20190820160615.14616-1-lvivier@redhat.com> Add a new RNG backend using QEMU builtin getrandom function. It can be created and used with something like: ... -object rng-builtin,id=rng0 -device virtio-rng,rng=rng0 ... Signed-off-by: Laurent Vivier <lvivier@redhat.com> --- backends/Makefile.objs | 2 +- backends/rng-builtin.c | 78 ++++++++++++++++++++++++++++++++++++++++++ qemu-options.hx | 7 ++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 backends/rng-builtin.c diff --git a/backends/Makefile.objs b/backends/Makefile.objs index 981e8e122f2c..f0691116e86e 100644 --- a/backends/Makefile.objs +++ b/backends/Makefile.objs @@ -1,4 +1,4 @@ -common-obj-y += rng.o rng-egd.o +common-obj-y += rng.o rng-egd.o rng-builtin.o common-obj-$(CONFIG_POSIX) += rng-random.o common-obj-$(CONFIG_TPM) += tpm.o diff --git a/backends/rng-builtin.c b/backends/rng-builtin.c new file mode 100644 index 000000000000..3381d47174df --- /dev/null +++ b/backends/rng-builtin.c @@ -0,0 +1,78 @@ +/* + * QEMU Builtin Random Number Generator Backend + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "sysemu/rng.h" +#include "qemu/main-loop.h" +#include "qemu/guest-random.h" + +#define TYPE_RNG_BUILTIN "rng-builtin" +#define RNG_BUILTIN(obj) OBJECT_CHECK(RngBuiltin, (obj), TYPE_RNG_BUILTIN) + +typedef struct RngBuiltin { + RngBackend parent; + QEMUBH *bh; +} RngBuiltin; + +static void rng_builtin_receive_entropy_bh(void *opaque) +{ + RngBuiltin *s = opaque; + + while (!QSIMPLEQ_EMPTY(&s->parent.requests)) { + RngRequest *req = QSIMPLEQ_FIRST(&s->parent.requests); + + qemu_guest_getrandom_nofail(req->data, req->size); + + req->receive_entropy(req->opaque, req->data, req->size); + + rng_backend_finalize_request(&s->parent, req); + } +} + +static void rng_builtin_request_entropy(RngBackend *b, RngRequest *req) +{ + RngBuiltin *s = RNG_BUILTIN(b); + + qemu_bh_schedule(s->bh); +} + +static void rng_builtin_init(Object *obj) +{ + RngBuiltin *s = RNG_BUILTIN(obj); + + s->bh = qemu_bh_new(rng_builtin_receive_entropy_bh, s); +} + +static void rng_builtin_finalize(Object *obj) +{ + RngBuiltin *s = RNG_BUILTIN(obj); + + qemu_bh_delete(s->bh); +} + +static void rng_builtin_class_init(ObjectClass *klass, void *data) +{ + RngBackendClass *rbc = RNG_BACKEND_CLASS(klass); + + rbc->request_entropy = rng_builtin_request_entropy; +} + +static const TypeInfo rng_builtin_info = { + .name = TYPE_RNG_BUILTIN, + .parent = TYPE_RNG_BACKEND, + .instance_size = sizeof(RngBuiltin), + .instance_init = rng_builtin_init, + .instance_finalize = rng_builtin_finalize, + .class_init = rng_builtin_class_init, +}; + +static void register_types(void) +{ + type_register_static(&rng_builtin_info); +} + +type_init(register_types); diff --git a/qemu-options.hx b/qemu-options.hx index 9621e934c0bf..312586cc18f8 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4323,6 +4323,13 @@ other options. The @option{share} boolean option is @var{on} by default with memfd. +@item -object rng-builtin,id=@var{id} + +Creates a random number generator backend which obtains entropy from +QEMU builtin functions. The @option{id} parameter is a unique ID that +will be used to reference this entropy backend from the @option{virtio-rng} +device. + @item -object rng-random,id=@var{id},filename=@var{/dev/random} Creates a random number generator backend which obtains entropy from -- 2.21.0
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com> To: qemu-devel@nongnu.org Cc: Laurent Vivier <lvivier@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, Amit Shah <amit@kernel.org> Subject: [Qemu-devel] [PULL 1/6] rng-builtin: add an RNG backend that uses qemu_guest_getrandom() Date: Wed, 4 Sep 2019 08:00:49 -0400 [thread overview] Message-ID: <20190820160615.14616-2-lvivier@redhat.com> (raw) Message-ID: <20190904120049.WKf0PpO0TAPxaM4NCsfhnXr3Ycf8xekWHxusZqfmqbk@z> (raw) In-Reply-To: <20190904120026.3220-1-mst@redhat.com> From: Laurent Vivier <lvivier@redhat.com> Add a new RNG backend using QEMU builtin getrandom function. It can be created and used with something like: ... -object rng-builtin,id=rng0 -device virtio-rng,rng=rng0 ... Signed-off-by: Laurent Vivier <lvivier@redhat.com> Message-Id: <20190820160615.14616-2-lvivier@redhat.com> --- backends/Makefile.objs | 2 +- backends/rng-builtin.c | 78 ++++++++++++++++++++++++++++++++++++++++++ qemu-options.hx | 7 ++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 backends/rng-builtin.c diff --git a/backends/Makefile.objs b/backends/Makefile.objs index 981e8e122f..f0691116e8 100644 --- a/backends/Makefile.objs +++ b/backends/Makefile.objs @@ -1,4 +1,4 @@ -common-obj-y += rng.o rng-egd.o +common-obj-y += rng.o rng-egd.o rng-builtin.o common-obj-$(CONFIG_POSIX) += rng-random.o common-obj-$(CONFIG_TPM) += tpm.o diff --git a/backends/rng-builtin.c b/backends/rng-builtin.c new file mode 100644 index 0000000000..3381d47174 --- /dev/null +++ b/backends/rng-builtin.c @@ -0,0 +1,78 @@ +/* + * QEMU Builtin Random Number Generator Backend + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "sysemu/rng.h" +#include "qemu/main-loop.h" +#include "qemu/guest-random.h" + +#define TYPE_RNG_BUILTIN "rng-builtin" +#define RNG_BUILTIN(obj) OBJECT_CHECK(RngBuiltin, (obj), TYPE_RNG_BUILTIN) + +typedef struct RngBuiltin { + RngBackend parent; + QEMUBH *bh; +} RngBuiltin; + +static void rng_builtin_receive_entropy_bh(void *opaque) +{ + RngBuiltin *s = opaque; + + while (!QSIMPLEQ_EMPTY(&s->parent.requests)) { + RngRequest *req = QSIMPLEQ_FIRST(&s->parent.requests); + + qemu_guest_getrandom_nofail(req->data, req->size); + + req->receive_entropy(req->opaque, req->data, req->size); + + rng_backend_finalize_request(&s->parent, req); + } +} + +static void rng_builtin_request_entropy(RngBackend *b, RngRequest *req) +{ + RngBuiltin *s = RNG_BUILTIN(b); + + qemu_bh_schedule(s->bh); +} + +static void rng_builtin_init(Object *obj) +{ + RngBuiltin *s = RNG_BUILTIN(obj); + + s->bh = qemu_bh_new(rng_builtin_receive_entropy_bh, s); +} + +static void rng_builtin_finalize(Object *obj) +{ + RngBuiltin *s = RNG_BUILTIN(obj); + + qemu_bh_delete(s->bh); +} + +static void rng_builtin_class_init(ObjectClass *klass, void *data) +{ + RngBackendClass *rbc = RNG_BACKEND_CLASS(klass); + + rbc->request_entropy = rng_builtin_request_entropy; +} + +static const TypeInfo rng_builtin_info = { + .name = TYPE_RNG_BUILTIN, + .parent = TYPE_RNG_BACKEND, + .instance_size = sizeof(RngBuiltin), + .instance_init = rng_builtin_init, + .instance_finalize = rng_builtin_finalize, + .class_init = rng_builtin_class_init, +}; + +static void register_types(void) +{ + type_register_static(&rng_builtin_info); +} + +type_init(register_types); diff --git a/qemu-options.hx b/qemu-options.hx index ea0638e92d..a8b70d946f 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4332,6 +4332,13 @@ other options. The @option{share} boolean option is @var{on} by default with memfd. +@item -object rng-builtin,id=@var{id} + +Creates a random number generator backend which obtains entropy from +QEMU builtin functions. The @option{id} parameter is a unique ID that +will be used to reference this entropy backend from the @option{virtio-rng} +device. + @item -object rng-random,id=@var{id},filename=@var{/dev/random} Creates a random number generator backend which obtains entropy from -- MST
next prev parent reply other threads:[~2019-08-20 16:12 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-20 16:06 [Qemu-devel] [PATCH v8 0/3] rng-builtin: add an RNG backend that uses qemu_guest_getrandom() Laurent Vivier 2019-08-20 16:06 ` Laurent Vivier [this message] 2019-09-04 12:00 ` [Qemu-devel] [PULL 1/6] " Michael S. Tsirkin 2019-08-20 16:06 ` [Qemu-devel] [PATCH v8 2/3] virtio-rng: Keep the default backend out of VirtIORNGConf Laurent Vivier 2019-09-04 12:00 ` [Qemu-devel] [PULL 2/6] " Michael S. Tsirkin 2019-08-20 16:06 ` [Qemu-devel] [PATCH v8 3/3] virtio-rng: change default backend to rng-builtin Laurent Vivier 2019-09-04 12:00 ` [Qemu-devel] [PULL 3/6] " Michael S. Tsirkin 2019-09-04 10:26 ` [Qemu-devel] [PATCH v8 0/3] rng-builtin: add an RNG backend that uses qemu_guest_getrandom() Michael S. Tsirkin -- strict thread matches above, loose matches on Subject: below -- 2019-09-04 12:00 [Qemu-devel] [PULL 0/6] virtio,vhost: fixes, features, cleanups Michael S. Tsirkin 2019-08-20 16:30 ` [Qemu-devel] [PATCH v2] virtio-pci: Add Function Level Reset support Julia Suvorova 2019-09-04 12:01 ` [Qemu-devel] [PULL 4/6] " Michael S. Tsirkin 2019-09-03 20:04 ` [Qemu-devel] [PATCH v2] libvhost-user: fix SLAVE_SEND_FD handling Johannes Berg 2019-09-04 2:06 ` Tiwei Bie 2019-09-04 9:01 ` Tiwei Bie 2019-09-04 12:01 ` [Qemu-devel] [PULL 5/6] " Michael S. Tsirkin 2019-09-04 6:50 ` [Qemu-devel] [PATCH] libvhost-user: introduce and use vu_has_protocol_feature() Johannes Berg 2019-09-04 9:22 ` Tiwei Bie 2019-09-04 12:01 ` [Qemu-devel] [PULL 6/6] " Michael S. Tsirkin 2019-09-04 17:16 ` [Qemu-devel] [PULL 0/6] virtio, vhost: fixes, features, cleanups Peter Maydell
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190820160615.14616-2-lvivier@redhat.com \ --to=lvivier@redhat.com \ --cc=amit@kernel.org \ --cc=armbru@redhat.com \ --cc=berrange@redhat.com \ --cc=kchamart@redhat.com \ --cc=mst@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=richard.henderson@linaro.org \ --cc=rjones@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).