aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmos Kong <akong@redhat.com>2013-11-21 16:42:51 +0800
committerAnthony Liguori <aliguori@amazon.com>2013-11-21 07:55:37 -0800
commit1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9 (patch)
tree224ae1e5a22160db3e9d0e219b81a66a871f5666
parent5e490b6a504912225dff0e520e1c6af68295d238 (diff)
downloadqemu-1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9.zip
qemu-1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9.tar.gz
qemu-1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9.tar.bz2
rng-egd: offset the point when repeatedly read from the buffer
The buffer content might be read out more than once, currently we just repeatedly read the first data block, buffer offset is missing. Cc: qemu-stable@nongnu.org Signed-off-by: Amos Kong <akong@redhat.com> Message-id: 1385023371-8198-3-git-send-email-akong@redhat.com Signed-off-by: Anthony Liguori <aliguori@amazon.com>
-rw-r--r--backends/rng-egd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index 6f56f9e..25bb3b4 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -91,12 +91,14 @@ static int rng_egd_chr_can_read(void *opaque)
static void rng_egd_chr_read(void *opaque, const uint8_t *buf, int size)
{
RngEgd *s = RNG_EGD(opaque);
+ size_t buf_offset = 0;
while (size > 0 && s->requests) {
RngRequest *req = s->requests->data;
int len = MIN(size, req->size - req->offset);
- memcpy(req->data + req->offset, buf, len);
+ memcpy(req->data + req->offset, buf + buf_offset, len);
+ buf_offset += len;
req->offset += len;
size -= len;