This implements a UEFI driver model driver for the VirtIO RNG device.
Changes since v3:
- add patch to add the driver to OvmfPkg builds (#4)
- add Jordan's ack to patch #1
Changes since v2:
- incorporate feedback from Laszlo (patch #2)
- added patch to wire up the driver in ArmVirtQemu (#3)
Changes since v1:
- validate args rather than ASSERT () their validity
- use a volatile intermediate buffer so the compiler does not optimize the
access away
- include Laszlo's patch #1 which greatly simplifies the next item
- poke the virtio RNG device as long as we need to satisfy our full request,
since a single invocation may return less data than we asked for
I have tested the driver with a rate limit of 19 bytes per 1000 ms, with a
file containing a predictable pattern. The RngTest output is below, it took
a minute or so for the full output to appear, but it looks like the repeated
polling of the device is working as expected.
while true; do echo -n 00112233445566778899AABBCCDDEEFF; done | \
xxd -r -p | dd iflag=fullblock count=2 bs=1M of=/tmp/unrandom
and pass
-object rng-random,filename=/tmp/unrandom,id=rng0 \
-device virtio-rng-pci,rng=rng0,max-bytes=19,period=1000 \
on the QEMU command line
Ard Biesheuvel (3):
OvmfPkg: implement UEFI driver for Virtio RNG devices
ArmVirtPkg: ArmVirtQemu: add driver for Virtio-RNG device
OvmfPkg: add driver for Virtio-RNG device
Laszlo Ersek (1):
OvmfPkg: VirtioFlush(): return the number of bytes written by the host
ArmVirtPkg/ArmVirtQemu.dsc | 1 +
ArmVirtPkg/ArmVirtQemu.fdf | 1 +
OvmfPkg/Include/Library/VirtioLib.h | 11 +-
OvmfPkg/Library/VirtioLib/VirtioLib.c | 26 +-
OvmfPkg/OvmfPkgIa32.dsc | 1 +
OvmfPkg/OvmfPkgIa32.fdf | 1 +
OvmfPkg/OvmfPkgIa32X64.dsc | 1 +
OvmfPkg/OvmfPkgIa32X64.fdf | 1 +
OvmfPkg/OvmfPkgX64.dsc | 1 +
OvmfPkg/OvmfPkgX64.fdf | 1 +
OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 3 +-
OvmfPkg/VirtioRngDxe/VirtioRng.c | 653 ++++++++++++++++++++
OvmfPkg/VirtioRngDxe/VirtioRng.h | 46 ++
OvmfPkg/VirtioRngDxe/VirtioRng.inf | 45 ++
OvmfPkg/VirtioScsiDxe/VirtioScsi.c | 2 +-
15 files changed, 788 insertions(+), 6 deletions(-)
create mode 100644 OvmfPkg/VirtioRngDxe/VirtioRng.c
create mode 100644 OvmfPkg/VirtioRngDxe/VirtioRng.h
create mode 100644 OvmfPkg/VirtioRngDxe/VirtioRng.inf
--
2.5.0
UEFI RNG Protocol Testing :
----------------------------
-- Locate UEFI RNG Protocol : [Pass]
-- Call RNG->GetInfo() interface :
>> Supported RNG Algorithm (Count = 1) :
0) 09000030-0000-0000-181F-B73801000000
-- Call RNG->GetRNG() interface :
>> RNG with default algorithm : [Pass]
>> RNG with SP800-90-HMAC-256 : [Fail - Status = Unsupported]
>> RNG with SP800-90-Hash-256 : [Fail - Status = Unsupported]
>> RNG with SP800-90-CTR-256 : [Fail - Status = Unsupported]
>> RNG with X9.31-3DES : [Fail - Status = Unsupported]
>> RNG with X9.31-AES : [Fail - Status = Unsupported]
>> RNG with RAW Entropy : [Pass]
-- Random Number Generation Test with default RNG Algorithm (20 Rounds):
01) - 00
02) - 1122
03) - 334455
04) - 66778899
05) - AABBCCDDEE
06) - FF0011223344
07) - 5566778899AABB
08) - CCDDEEFF00112233
09) - 445566778899AABBCC
10) - DDEEFF00112233445566
11) - 778899AABBCCDDEEFF0011
12) - 2233445566778899AABBCCDD
13) - EEFF00112233445566778899AA
14) - BBCCDDEEFF001122334455667788
15) - 99AABBCCDDEEFF0011223344556677
16) - 8899AABBCCDDEEFF0011223344556677
17) - 8899AABBCCDDEEFF001122334455667788
18) - 99AABBCCDDEEFF00112233445566778899AA
19) - BBCCDDEEFF00112233445566778899AABBCCDD
20) - EEFF00112233445566778899AABBCCDDEEFF0011
-- RAW Entropy Generation Test (20 Rounds) :
01) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
02) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
03) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
04) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
05) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
06) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
07) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
08) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
09) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
10) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
11) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
12) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
13) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
14) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
15) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
16) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
17) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
18) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
19) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
20) - 2233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011
-- Exit UEFI RNG Protocol Test (Status = Success).
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel