qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/4] virtio-rng-pci: create a default backend if


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 2/4] virtio-rng-pci: create a default backend if none exists
Date: Fri, 26 Oct 2012 15:16:45 -0500
User-agent: Notmuch/0.13.2+93~ged93d79 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu)

Paolo Bonzini <address@hidden> writes:

> Il 26/10/2012 20:59, Paolo Bonzini ha scritto:
>> Il 26/10/2012 19:21, Anthony Liguori ha scritto:
>>> This allows you to specify:
>>>
>>>   $ qemu -device virtio-rng-pci
>>>
>>> And things will Just Work with a reasonable default.
>>>
>>> Signed-off-by: Anthony Liguori <address@hidden>
>>> ---
>>>  hw/virtio-pci.c | 13 +++++++++++++
>>>  hw/virtio-rng.h |  2 ++
>>>  2 files changed, 15 insertions(+)
>>>
>>> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
>>> index 0dc2a06..cfdb779 100644
>>> --- a/hw/virtio-pci.c
>>> +++ b/hw/virtio-pci.c
>>> @@ -885,6 +885,19 @@ static int virtio_rng_init_pci(PCIDevice *pci_dev)
>>>      VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
>>>      VirtIODevice *vdev;
>>>  
>>> +    if (proxy->rng.rng == NULL) {
>>> +        proxy->rng.default_backend = 
>>> RNG_RANDOM(object_new(TYPE_RNG_RANDOM));
>>> +
>>> +        object_property_add_child(OBJECT(pci_dev),
>>> +                                  "default-backend",
>>> +                                  OBJECT(proxy->rng.default_backend),
>>> +                                  NULL);
>>> +
>>> +        object_property_set_link(OBJECT(pci_dev),
>>> +                                 OBJECT(proxy->rng.default_backend),
>>> +                                 "rng", NULL);
>>> +    }
>>> +
>>>      vdev = virtio_rng_init(&pci_dev->qdev, &proxy->rng);
>>>      if (!vdev) {
>>>          return -1;
>>> diff --git a/hw/virtio-rng.h b/hw/virtio-rng.h
>>> index fbb0104..63ddb96 100644
>>> --- a/hw/virtio-rng.h
>>> +++ b/hw/virtio-rng.h
>>> @@ -13,12 +13,14 @@
>>>  #define _QEMU_VIRTIO_RNG_H
>>>  
>>>  #include "qemu/rng.h"
>>> +#include "qemu/rng-random.h"
>>>  
>>>  /* The Virtio ID for the virtio rng device */
>>>  #define VIRTIO_ID_RNG    4
>>>  
>>>  struct VirtIORNGConf {
>>>      RngBackend *rng;
>>> +    RndRandom *default_backend;
>>>  };
>>>  
>>>  #endif
>>>
>> 
>> NACK.  Starting a guest that runs rngd (or just a malicious guest) will
>> completely deprive the host of entropy.
>> 
>> If you make the default /dev/hwrng, however, that would be ok.
>
> Also, does this break non-Linux?

It should fail gracefully.

If you do:

qemu -device virtio-rng-pci

Before this series you'd get:

qemu: Invalid value for parameter 'rng', expects a valid object

Now on !Linux you would get:

qemu -device virtio-rng-pci

qemu: Failed to open /dev/random

So it's still a failure, just a different message.

But this does suggest that we shouldn't add it to the default machine on
!Linux because we don't want the default machine failing.

Perhaps we can find better default backends on !Linux...

> What if the default was changed to /dev/hwrng but an older Linux
> distro didn't have the device file at all?

It would throw an error gracefully.

Regards,

Anthony Liguori

>
> Paolo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]