X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=backends%2Frng-random.c;h=80eb5be138cec2e5d67b889c6fbe53025f517cdd;hb=d0cda6f461fd33c5f9b063781c63c1ce5fd3fa3b;hp=a6cb3858e37fc1e15560873d4f26d8dcdf2ad0e2;hpb=60253ed1e6ec6d8e5ef2efe7bf755f475dce9956;p=mirror_qemu.git diff --git a/backends/rng-random.c b/backends/rng-random.c index a6cb3858e3..80eb5be138 100644 --- a/backends/rng-random.c +++ b/backends/rng-random.c @@ -13,10 +13,12 @@ #include "qemu/osdep.h" #include "sysemu/rng-random.h" #include "sysemu/rng.h" +#include "qapi/error.h" #include "qapi/qmp/qerror.h" #include "qemu/main-loop.h" +#include "qemu/module.h" -struct RndRandom +struct RngRandom { RngBackend parent; @@ -33,10 +35,10 @@ struct RndRandom static void entropy_available(void *opaque) { - RndRandom *s = RNG_RANDOM(opaque); + RngRandom *s = RNG_RANDOM(opaque); - while (s->parent.requests != NULL) { - RngRequest *req = s->parent.requests->data; + while (!QSIMPLEQ_EMPTY(&s->parent.requests)) { + RngRequest *req = QSIMPLEQ_FIRST(&s->parent.requests); ssize_t len; len = read(s->fd, req->data, req->size); @@ -56,9 +58,9 @@ static void entropy_available(void *opaque) static void rng_random_request_entropy(RngBackend *b, RngRequest *req) { - RndRandom *s = RNG_RANDOM(b); + RngRandom *s = RNG_RANDOM(b); - if (s->parent.requests == NULL) { + if (QSIMPLEQ_EMPTY(&s->parent.requests)) { /* If there are no pending requests yet, we need to * install our fd handler. */ qemu_set_fd_handler(s->fd, entropy_available, NULL, s); @@ -67,13 +69,13 @@ static void rng_random_request_entropy(RngBackend *b, RngRequest *req) static void rng_random_opened(RngBackend *b, Error **errp) { - RndRandom *s = RNG_RANDOM(b); + RngRandom *s = RNG_RANDOM(b); if (s->filename == NULL) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "filename", "a valid filename"); } else { - s->fd = qemu_open(s->filename, O_RDONLY | O_NONBLOCK); + s->fd = qemu_open_old(s->filename, O_RDONLY | O_NONBLOCK); if (s->fd == -1) { error_setg_file_open(errp, errno, s->filename); } @@ -82,7 +84,7 @@ static void rng_random_opened(RngBackend *b, Error **errp) static char *rng_random_get_filename(Object *obj, Error **errp) { - RndRandom *s = RNG_RANDOM(obj); + RngRandom *s = RNG_RANDOM(obj); return g_strdup(s->filename); } @@ -91,10 +93,10 @@ static void rng_random_set_filename(Object *obj, const char *filename, Error **errp) { RngBackend *b = RNG_BACKEND(obj); - RndRandom *s = RNG_RANDOM(obj); + RngRandom *s = RNG_RANDOM(obj); if (b->opened) { - error_setg(errp, QERR_PERMISSION_DENIED); + error_setg(errp, "Property 'filename' can no longer be set"); return; } @@ -104,20 +106,15 @@ static void rng_random_set_filename(Object *obj, const char *filename, static void rng_random_init(Object *obj) { - RndRandom *s = RNG_RANDOM(obj); + RngRandom *s = RNG_RANDOM(obj); - object_property_add_str(obj, "filename", - rng_random_get_filename, - rng_random_set_filename, - NULL); - - s->filename = g_strdup("/dev/random"); + s->filename = g_strdup("/dev/urandom"); s->fd = -1; } static void rng_random_finalize(Object *obj) { - RndRandom *s = RNG_RANDOM(obj); + RngRandom *s = RNG_RANDOM(obj); if (s->fd != -1) { qemu_set_fd_handler(s->fd, NULL, NULL, NULL); @@ -133,12 +130,16 @@ static void rng_random_class_init(ObjectClass *klass, void *data) rbc->request_entropy = rng_random_request_entropy; rbc->opened = rng_random_opened; + object_class_property_add_str(klass, "filename", + rng_random_get_filename, + rng_random_set_filename); + } static const TypeInfo rng_random_info = { .name = TYPE_RNG_RANDOM, .parent = TYPE_RNG_BACKEND, - .instance_size = sizeof(RndRandom), + .instance_size = sizeof(RngRandom), .class_init = rng_random_class_init, .instance_init = rng_random_init, .instance_finalize = rng_random_finalize,