diff options
author | Amos Kong <akong@redhat.com> | 2013-11-21 16:42:51 +0800 |
---|---|---|
committer | Anthony Liguori <aliguori@amazon.com> | 2013-11-21 07:55:37 -0800 |
commit | 1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9 (patch) | |
tree | 224ae1e5a22160db3e9d0e219b81a66a871f5666 | |
parent | 5e490b6a504912225dff0e520e1c6af68295d238 (diff) | |
download | qemu-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.c | 4 |
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; |