From: Thomas Huth <thuth@redhat.com>
To: Laurent Vivier <lvivier@redhat.com>,
qemu-ppc@nongnu.org, agraf@suse.de, david@gibson.dropbear.id.au
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [Qemu-ppc] [RFC PATCH] ppc/spapr_hcall: Implement H_RANDOM hypercall
Date: Thu, 06 Aug 2015 14:05:13 +0200 [thread overview]
Message-ID: <55C34D79.5010802@redhat.com> (raw)
In-Reply-To: <55C34453.3080104@redhat.com>
On 06/08/15 13:26, Laurent Vivier wrote:
> Hi,
>
> As "/dev/random" can be blocking perhaps it is possible/better to use
> the QEMU rng backend instead ?
Actually, I tried to use the rng backends first ... but they turned out
to be horrible for being used in a synchronous call like I need here:
You've got to install a callback function which is called at a "random"
point in time when some data becomes available - and it is even called
with less bytes than you requested! (i.e. I requested 8 bytes, but the
callback got only called with 6 bytes). So to use it, I'd have to
introduce a ring buffer or something similar to query enough random data
in advance - and when it runs empty, the H_RANDOM hypercall would need
to block again anyway.
So instead of introducing a hard-to-understand-and-maintain "monster
wrapper" around the rng backend functions, I think the short and easy
understandable qemu_random() implementation in this patch here is the
better choice.
And looking at https://patchwork.ozlabs.org/patch/497062/ I think it
also should not hurt too much that qemu_random() might be slow here
since the real hardware number generator is apparently also not very fast.
Thomas
> On 06/08/2015 10:23, Thomas Huth wrote:
>> The spapr firmware SLOF likely needs a way to get random numbers
>> soon. Instead of re-inventing the wheel there, we could simply
>> use the H_RANDOM hypercall to get the random numbers from QEMU.
>> For this the H_RANDOM hypercall needs to be implemented first, of
>> course.
>> So this patch introduces an OS-specifc helper function called
>> qemu_random() to get "good" random numbers (from /dev/random on
>> POSIX systems and via CryptGenRandom() on Windows), and then uses
>> this helper functions to provide random data to the guest via the
>> H_RANDOM hypercall.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>> Note: Since I do not have access to the SPAPR spec, I figured out
>> the calling conventions of the hypercall by looking at the way
>> the Linux kernel is using this call to retriev random data. So
>> there might be some bugs or missing pieces here.
>>
>> Also note that the Windows version of qemu_random() is
>> compile-tested only (with a MinGW cross-compiler), since I do not
>> have access to a Windows system right now.
>>
>> hw/ppc/spapr_hcall.c | 12 ++++++++++++
>> include/hw/ppc/spapr.h | 1 +
>> include/qemu/osdep.h | 11 +++++++++++
>> util/oslib-posix.c | 16 ++++++++++++++++
>> util/oslib-win32.c | 17 +++++++++++++++++
>> 5 files changed, 57 insertions(+)
next prev parent reply other threads:[~2015-08-06 12:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-06 8:23 [Qemu-devel] [RFC PATCH] ppc/spapr_hcall: Implement H_RANDOM hypercall Thomas Huth
2015-08-06 11:26 ` [Qemu-devel] [Qemu-ppc] " Laurent Vivier
2015-08-06 12:05 ` Thomas Huth [this message]
2015-08-06 12:35 ` Laurent Vivier
2015-08-06 12:43 ` Thomas Huth
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=55C34D79.5010802@redhat.com \
--to=thuth@redhat.com \
--cc=agraf@suse.de \
--cc=david@gibson.dropbear.id.au \
--cc=lvivier@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.