From: Amos Kong Date: Thu, 21 Nov 2013 08:42:51 +0000 (+0800) Subject: rng-egd: offset the point when repeatedly read from the buffer X-Git-Tag: v1.7.0-rc1~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1eb1bd9eafa890f1f4d16ef5cb8b9239a86874d9;p=thirdparty%2Fqemu.git 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 Message-id: 1385023371-8198-3-git-send-email-akong@redhat.com Signed-off-by: Anthony Liguori --- diff --git a/backends/rng-egd.c b/backends/rng-egd.c index 6f56f9e4e44..25bb3b453ba 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;