
On Tue, Nov 07, 2023 at 04:09:00PM +0000, Andre Przywara wrote:
According to the virtio v1.x "entropy device" specification, a virtio-rng device is supposed to always return at least one byte of entropy. However the virtio v0.9 spec does not mention such a requirement.
The Arm Fixed Virtual Platform (FVP) implementation of virtio-rng always returns 8 bytes less of entropy than requested. If 8 bytes or less are requested, it will return 0 bytes. This behaviour makes U-Boot's virtio_rng_read() implementation go into an endless loop, hanging the system.
Work around this problem by always requesting 8 bytes more than needed, but only if a previous call to virtqueue_get_buf() returned 0 bytes.
This should never trigger on a v1.x spec compliant implementation, but fixes the hang on the Arm FVP.
Signed-off-by: Andre Przywara andre.przywara@arm.com Reported-by: Peter Hoyes peter.hoyes@arm.com
Applied to u-boot/master, thanks!