summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmos Kong <akong@redhat.com>2013-11-21 16:42:51 +0800
committerMichael Roth <mdroth@linux.vnet.ibm.com>2013-12-09 11:40:30 -0600
commit7cfd037403ba34e8ed1ebfa4e7d6abec738e2000 (patch)
tree461beede25de95e62bcce319cd648c77002e5341
parent0f6298786f0d88a29d150a19870f2ea7bc5c01a5 (diff)
downloadqemu-7cfd037403ba34e8ed1ebfa4e7d6abec738e2000.tar.gz
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> (cherry picked from commit 1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.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 9e5a5366f7..2962795a8f 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;