[app-emulation/qemu] version bump
This commit is contained in:
parent
334efc2e44
commit
a5094de527
@ -1 +1 @@
|
||||
DIST qemu-2.5.1.tar.bz2 25464539 SHA256 028752c33bb786abbfe496ba57315dc5a7d0a33b5a7a767f6d7a29020c525d2c SHA512 66959ad6a2a89f23c5daba245c76f71ddc03a33a1167bca639a042ebbf7329b2e698cd2c0e65c22a9874563a34256a48386aa9df6475b06d38db74187e3e3b3f WHIRLPOOL 32525271574692d56b7794dc63606659f46e6ae19a56dee31b3cec33dab9c4eb74147a65db4940229492d8680f38c2d05bc2a8fbcb4b6887b0c1cbe5fbbe44cf
|
||||
DIST qemu-2.6.0.tar.bz2 25755267 SHA256 c9ac4a651b273233d21b8bec32e30507cb9cce7900841febc330956a1a8434ec SHA512 0d17075e52f7688cc05776ad7a76509d1f22ae8eda896fddb06c1fd6dea6da485422c8efb3ba118b054d9a413b7b02baba656a9131658dabdb71def50c92b215 WHIRLPOOL f9373bf66f67301787e7510ac161b0072ba7c7bc067e10215fb97a52524adaba0fcbc79a4c0cefac9c6e2b4e07380eb9d10f65ed6ce6867e43843043684231ed
|
||||
|
@ -1,46 +0,0 @@
|
||||
From dff0367cf66f489aa772320fa2937a8cac1ca30d Mon Sep 17 00:00:00 2001
|
||||
From: Prasad J Pandit <pjp@fedoraproject.org>
|
||||
Date: Fri, 29 Jan 2016 18:30:34 +0530
|
||||
Subject: [PATCH] usb: ehci: add capability mmio write function
|
||||
|
||||
USB Ehci emulation supports host controller capability registers.
|
||||
But its mmio '.write' function was missing, which lead to a null
|
||||
pointer dereference issue. Add a do nothing 'ehci_caps_write'
|
||||
definition to avoid it; Do nothing because capability registers
|
||||
are Read Only(RO).
|
||||
|
||||
Reported-by: Zuozhi Fzz <zuozhi.fzz@alibaba-inc.com>
|
||||
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||
Message-id: 1454072434-16045-1-git-send-email-ppandit@redhat.com
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
---
|
||||
hw/usb/hcd-ehci.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
|
||||
index 1b50601..0f95d0d 100644
|
||||
--- a/hw/usb/hcd-ehci.c
|
||||
+++ b/hw/usb/hcd-ehci.c
|
||||
@@ -895,6 +895,11 @@ static uint64_t ehci_caps_read(void *ptr, hwaddr addr,
|
||||
return s->caps[addr];
|
||||
}
|
||||
|
||||
+static void ehci_caps_write(void *ptr, hwaddr addr,
|
||||
+ uint64_t val, unsigned size)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
static uint64_t ehci_opreg_read(void *ptr, hwaddr addr,
|
||||
unsigned size)
|
||||
{
|
||||
@@ -2315,6 +2320,7 @@ static void ehci_frame_timer(void *opaque)
|
||||
|
||||
static const MemoryRegionOps ehci_mmio_caps_ops = {
|
||||
.read = ehci_caps_read,
|
||||
+ .write = ehci_caps_write,
|
||||
.valid.min_access_size = 1,
|
||||
.valid.max_access_size = 4,
|
||||
.impl.min_access_size = 1,
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,98 +0,0 @@
|
||||
From 3c52ddcdc548e7fbe65112d8a7bdc9cd105b4750 Mon Sep 17 00:00:00 2001
|
||||
From: Ladi Prosek <lprosek@redhat.com>
|
||||
Date: Thu, 3 Mar 2016 09:37:15 +0100
|
||||
Subject: [PATCH] rng: remove the unused request cancellation code
|
||||
|
||||
rng_backend_cancel_requests had no callers and none of the code
|
||||
deleted in this commit ever ran.
|
||||
|
||||
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
|
||||
Reviewed-by: Amit Shah <amit.shah@redhat.com>
|
||||
Message-Id: <1456994238-9585-2-git-send-email-lprosek@redhat.com>
|
||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
||||
---
|
||||
backends/rng-egd.c | 12 ------------
|
||||
backends/rng.c | 9 ---------
|
||||
include/sysemu/rng.h | 11 -----------
|
||||
3 files changed, 32 deletions(-)
|
||||
|
||||
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
|
||||
index 2de5cd5..0b2976a 100644
|
||||
--- a/backends/rng-egd.c
|
||||
+++ b/backends/rng-egd.c
|
||||
@@ -125,17 +125,6 @@ static void rng_egd_free_requests(RngEgd *s)
|
||||
s->requests = NULL;
|
||||
}
|
||||
|
||||
-static void rng_egd_cancel_requests(RngBackend *b)
|
||||
-{
|
||||
- RngEgd *s = RNG_EGD(b);
|
||||
-
|
||||
- /* We simply delete the list of pending requests. If there is data in the
|
||||
- * queue waiting to be read, this is okay, because there will always be
|
||||
- * more data than we requested originally
|
||||
- */
|
||||
- rng_egd_free_requests(s);
|
||||
-}
|
||||
-
|
||||
static void rng_egd_opened(RngBackend *b, Error **errp)
|
||||
{
|
||||
RngEgd *s = RNG_EGD(b);
|
||||
@@ -213,7 +202,6 @@ static void rng_egd_class_init(ObjectClass *klass, void *data)
|
||||
RngBackendClass *rbc = RNG_BACKEND_CLASS(klass);
|
||||
|
||||
rbc->request_entropy = rng_egd_request_entropy;
|
||||
- rbc->cancel_requests = rng_egd_cancel_requests;
|
||||
rbc->opened = rng_egd_opened;
|
||||
}
|
||||
|
||||
diff --git a/backends/rng.c b/backends/rng.c
|
||||
index b7820ef..2f2f3ee 100644
|
||||
--- a/backends/rng.c
|
||||
+++ b/backends/rng.c
|
||||
@@ -26,15 +26,6 @@ void rng_backend_request_entropy(RngBackend *s, size_t size,
|
||||
}
|
||||
}
|
||||
|
||||
-void rng_backend_cancel_requests(RngBackend *s)
|
||||
-{
|
||||
- RngBackendClass *k = RNG_BACKEND_GET_CLASS(s);
|
||||
-
|
||||
- if (k->cancel_requests) {
|
||||
- k->cancel_requests(s);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static bool rng_backend_prop_get_opened(Object *obj, Error **errp)
|
||||
{
|
||||
RngBackend *s = RNG_BACKEND(obj);
|
||||
diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h
|
||||
index 858be8c..87b3ebe 100644
|
||||
--- a/include/sysemu/rng.h
|
||||
+++ b/include/sysemu/rng.h
|
||||
@@ -37,7 +37,6 @@ struct RngBackendClass
|
||||
|
||||
void (*request_entropy)(RngBackend *s, size_t size,
|
||||
EntropyReceiveFunc *receive_entropy, void *opaque);
|
||||
- void (*cancel_requests)(RngBackend *s);
|
||||
|
||||
void (*opened)(RngBackend *s, Error **errp);
|
||||
};
|
||||
@@ -68,14 +67,4 @@ struct RngBackend
|
||||
void rng_backend_request_entropy(RngBackend *s, size_t size,
|
||||
EntropyReceiveFunc *receive_entropy,
|
||||
void *opaque);
|
||||
-
|
||||
-/**
|
||||
- * rng_backend_cancel_requests:
|
||||
- * @s: the backend to cancel all pending requests in
|
||||
- *
|
||||
- * Cancels all pending requests submitted by @rng_backend_request_entropy. This
|
||||
- * should be used by a device during reset or in preparation for live migration
|
||||
- * to stop tracking any request.
|
||||
- */
|
||||
-void rng_backend_cancel_requests(RngBackend *s);
|
||||
#endif
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,135 +0,0 @@
|
||||
From 74074e8a7c60592cf1cc6469dbc2550d24aeded3 Mon Sep 17 00:00:00 2001
|
||||
From: Ladi Prosek <lprosek@redhat.com>
|
||||
Date: Thu, 3 Mar 2016 09:37:16 +0100
|
||||
Subject: [PATCH] rng: move request queue from RngEgd to RngBackend
|
||||
|
||||
The 'requests' field now lives in the RngBackend parent class.
|
||||
There are no functional changes in this commit.
|
||||
|
||||
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
|
||||
Reviewed-by: Amit Shah <amit.shah@redhat.com>
|
||||
Message-Id: <1456994238-9585-3-git-send-email-lprosek@redhat.com>
|
||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
||||
---
|
||||
backends/rng-egd.c | 28 +++++++++-------------------
|
||||
include/sysemu/rng.h | 11 +++++++++++
|
||||
2 files changed, 20 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
|
||||
index 0b2976a..b061362 100644
|
||||
--- a/backends/rng-egd.c
|
||||
+++ b/backends/rng-egd.c
|
||||
@@ -25,19 +25,8 @@ typedef struct RngEgd
|
||||
|
||||
CharDriverState *chr;
|
||||
char *chr_name;
|
||||
-
|
||||
- GSList *requests;
|
||||
} RngEgd;
|
||||
|
||||
-typedef struct RngRequest
|
||||
-{
|
||||
- EntropyReceiveFunc *receive_entropy;
|
||||
- uint8_t *data;
|
||||
- void *opaque;
|
||||
- size_t offset;
|
||||
- size_t size;
|
||||
-} RngRequest;
|
||||
-
|
||||
static void rng_egd_request_entropy(RngBackend *b, size_t size,
|
||||
EntropyReceiveFunc *receive_entropy,
|
||||
void *opaque)
|
||||
@@ -66,7 +55,7 @@ static void rng_egd_request_entropy(RngBackend *b, size_t size,
|
||||
size -= len;
|
||||
}
|
||||
|
||||
- s->requests = g_slist_append(s->requests, req);
|
||||
+ s->parent.requests = g_slist_append(s->parent.requests, req);
|
||||
}
|
||||
|
||||
static void rng_egd_free_request(RngRequest *req)
|
||||
@@ -81,7 +70,7 @@ static int rng_egd_chr_can_read(void *opaque)
|
||||
GSList *i;
|
||||
int size = 0;
|
||||
|
||||
- for (i = s->requests; i; i = i->next) {
|
||||
+ for (i = s->parent.requests; i; i = i->next) {
|
||||
RngRequest *req = i->data;
|
||||
size += req->size - req->offset;
|
||||
}
|
||||
@@ -94,8 +83,8 @@ 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;
|
||||
+ while (size > 0 && s->parent.requests) {
|
||||
+ RngRequest *req = s->parent.requests->data;
|
||||
int len = MIN(size, req->size - req->offset);
|
||||
|
||||
memcpy(req->data + req->offset, buf + buf_offset, len);
|
||||
@@ -104,7 +93,8 @@ static void rng_egd_chr_read(void *opaque, const uint8_t *buf, int size)
|
||||
size -= len;
|
||||
|
||||
if (req->offset == req->size) {
|
||||
- s->requests = g_slist_remove_link(s->requests, s->requests);
|
||||
+ s->parent.requests = g_slist_remove_link(s->parent.requests,
|
||||
+ s->parent.requests);
|
||||
|
||||
req->receive_entropy(req->opaque, req->data, req->size);
|
||||
|
||||
@@ -117,12 +107,12 @@ static void rng_egd_free_requests(RngEgd *s)
|
||||
{
|
||||
GSList *i;
|
||||
|
||||
- for (i = s->requests; i; i = i->next) {
|
||||
+ for (i = s->parent.requests; i; i = i->next) {
|
||||
rng_egd_free_request(i->data);
|
||||
}
|
||||
|
||||
- g_slist_free(s->requests);
|
||||
- s->requests = NULL;
|
||||
+ g_slist_free(s->parent.requests);
|
||||
+ s->parent.requests = NULL;
|
||||
}
|
||||
|
||||
static void rng_egd_opened(RngBackend *b, Error **errp)
|
||||
diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h
|
||||
index 87b3ebe..c744d82 100644
|
||||
--- a/include/sysemu/rng.h
|
||||
+++ b/include/sysemu/rng.h
|
||||
@@ -24,6 +24,7 @@
|
||||
#define RNG_BACKEND_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(RngBackendClass, (klass), TYPE_RNG_BACKEND)
|
||||
|
||||
+typedef struct RngRequest RngRequest;
|
||||
typedef struct RngBackendClass RngBackendClass;
|
||||
typedef struct RngBackend RngBackend;
|
||||
|
||||
@@ -31,6 +32,15 @@ typedef void (EntropyReceiveFunc)(void *opaque,
|
||||
const void *data,
|
||||
size_t size);
|
||||
|
||||
+struct RngRequest
|
||||
+{
|
||||
+ EntropyReceiveFunc *receive_entropy;
|
||||
+ uint8_t *data;
|
||||
+ void *opaque;
|
||||
+ size_t offset;
|
||||
+ size_t size;
|
||||
+};
|
||||
+
|
||||
struct RngBackendClass
|
||||
{
|
||||
ObjectClass parent_class;
|
||||
@@ -47,6 +57,7 @@ struct RngBackend
|
||||
|
||||
/*< protected >*/
|
||||
bool opened;
|
||||
+ GSList *requests;
|
||||
};
|
||||
|
||||
/**
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,155 +0,0 @@
|
||||
From 9f14b0add1dcdbfa2ee61051d068211fb0a1fcc9 Mon Sep 17 00:00:00 2001
|
||||
From: Ladi Prosek <lprosek@redhat.com>
|
||||
Date: Thu, 3 Mar 2016 09:37:17 +0100
|
||||
Subject: [PATCH] rng: move request queue cleanup from RngEgd to RngBackend
|
||||
|
||||
RngBackend is now in charge of cleaning up the linked list on
|
||||
instance finalization. It also exposes a function to finalize
|
||||
individual RngRequest instances, called by its child classes.
|
||||
|
||||
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
|
||||
Reviewed-by: Amit Shah <amit.shah@redhat.com>
|
||||
Message-Id: <1456994238-9585-4-git-send-email-lprosek@redhat.com>
|
||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
||||
---
|
||||
backends/rng-egd.c | 25 +------------------------
|
||||
backends/rng.c | 32 ++++++++++++++++++++++++++++++++
|
||||
include/sysemu/rng.h | 12 ++++++++++++
|
||||
3 files changed, 45 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
|
||||
index b061362..8f2bd16 100644
|
||||
--- a/backends/rng-egd.c
|
||||
+++ b/backends/rng-egd.c
|
||||
@@ -58,12 +58,6 @@ static void rng_egd_request_entropy(RngBackend *b, size_t size,
|
||||
s->parent.requests = g_slist_append(s->parent.requests, req);
|
||||
}
|
||||
|
||||
-static void rng_egd_free_request(RngRequest *req)
|
||||
-{
|
||||
- g_free(req->data);
|
||||
- g_free(req);
|
||||
-}
|
||||
-
|
||||
static int rng_egd_chr_can_read(void *opaque)
|
||||
{
|
||||
RngEgd *s = RNG_EGD(opaque);
|
||||
@@ -93,28 +87,13 @@ static void rng_egd_chr_read(void *opaque, const uint8_t *buf, int size)
|
||||
size -= len;
|
||||
|
||||
if (req->offset == req->size) {
|
||||
- s->parent.requests = g_slist_remove_link(s->parent.requests,
|
||||
- s->parent.requests);
|
||||
-
|
||||
req->receive_entropy(req->opaque, req->data, req->size);
|
||||
|
||||
- rng_egd_free_request(req);
|
||||
+ rng_backend_finalize_request(&s->parent, req);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-static void rng_egd_free_requests(RngEgd *s)
|
||||
-{
|
||||
- GSList *i;
|
||||
-
|
||||
- for (i = s->parent.requests; i; i = i->next) {
|
||||
- rng_egd_free_request(i->data);
|
||||
- }
|
||||
-
|
||||
- g_slist_free(s->parent.requests);
|
||||
- s->parent.requests = NULL;
|
||||
-}
|
||||
-
|
||||
static void rng_egd_opened(RngBackend *b, Error **errp)
|
||||
{
|
||||
RngEgd *s = RNG_EGD(b);
|
||||
@@ -183,8 +162,6 @@ static void rng_egd_finalize(Object *obj)
|
||||
}
|
||||
|
||||
g_free(s->chr_name);
|
||||
-
|
||||
- rng_egd_free_requests(s);
|
||||
}
|
||||
|
||||
static void rng_egd_class_init(ObjectClass *klass, void *data)
|
||||
diff --git a/backends/rng.c b/backends/rng.c
|
||||
index 2f2f3ee..014cb9d 100644
|
||||
--- a/backends/rng.c
|
||||
+++ b/backends/rng.c
|
||||
@@ -64,6 +64,30 @@ static void rng_backend_prop_set_opened(Object *obj, bool value, Error **errp)
|
||||
s->opened = true;
|
||||
}
|
||||
|
||||
+static void rng_backend_free_request(RngRequest *req)
|
||||
+{
|
||||
+ g_free(req->data);
|
||||
+ g_free(req);
|
||||
+}
|
||||
+
|
||||
+static void rng_backend_free_requests(RngBackend *s)
|
||||
+{
|
||||
+ GSList *i;
|
||||
+
|
||||
+ for (i = s->requests; i; i = i->next) {
|
||||
+ rng_backend_free_request(i->data);
|
||||
+ }
|
||||
+
|
||||
+ g_slist_free(s->requests);
|
||||
+ s->requests = NULL;
|
||||
+}
|
||||
+
|
||||
+void rng_backend_finalize_request(RngBackend *s, RngRequest *req)
|
||||
+{
|
||||
+ s->requests = g_slist_remove(s->requests, req);
|
||||
+ rng_backend_free_request(req);
|
||||
+}
|
||||
+
|
||||
static void rng_backend_init(Object *obj)
|
||||
{
|
||||
object_property_add_bool(obj, "opened",
|
||||
@@ -72,6 +96,13 @@ static void rng_backend_init(Object *obj)
|
||||
NULL);
|
||||
}
|
||||
|
||||
+static void rng_backend_finalize(Object *obj)
|
||||
+{
|
||||
+ RngBackend *s = RNG_BACKEND(obj);
|
||||
+
|
||||
+ rng_backend_free_requests(s);
|
||||
+}
|
||||
+
|
||||
static void rng_backend_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
|
||||
@@ -84,6 +115,7 @@ static const TypeInfo rng_backend_info = {
|
||||
.parent = TYPE_OBJECT,
|
||||
.instance_size = sizeof(RngBackend),
|
||||
.instance_init = rng_backend_init,
|
||||
+ .instance_finalize = rng_backend_finalize,
|
||||
.class_size = sizeof(RngBackendClass),
|
||||
.class_init = rng_backend_class_init,
|
||||
.abstract = true,
|
||||
diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h
|
||||
index c744d82..08a2eda 100644
|
||||
--- a/include/sysemu/rng.h
|
||||
+++ b/include/sysemu/rng.h
|
||||
@@ -78,4 +79,15 @@ struct RngBackend
|
||||
void rng_backend_request_entropy(RngBackend *s, size_t size,
|
||||
EntropyReceiveFunc *receive_entropy,
|
||||
void *opaque);
|
||||
+
|
||||
+/**
|
||||
+ * rng_backend_free_request:
|
||||
+ * @s: the backend that created the request
|
||||
+ * @req: the request to finalize
|
||||
+ *
|
||||
+ * Used by child rng backend classes to finalize requests once they've been
|
||||
+ * processed. The request is removed from the list of active requests and
|
||||
+ * deleted.
|
||||
+ */
|
||||
+void rng_backend_finalize_request(RngBackend *s, RngRequest *req);
|
||||
#endif
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,179 +0,0 @@
|
||||
From 60253ed1e6ec6d8e5ef2efe7bf755f475dce9956 Mon Sep 17 00:00:00 2001
|
||||
From: Ladi Prosek <lprosek@redhat.com>
|
||||
Date: Thu, 3 Mar 2016 09:37:18 +0100
|
||||
Subject: [PATCH] rng: add request queue support to rng-random
|
||||
|
||||
Requests are now created in the RngBackend parent class and the
|
||||
code path is shared by both rng-egd and rng-random.
|
||||
|
||||
This commit fixes the rng-random implementation which processed
|
||||
only one request at a time and simply discarded all but the most
|
||||
recent one. In the guest this manifested as delayed completion
|
||||
of reads from virtio-rng, i.e. a read was completed only after
|
||||
another read was issued.
|
||||
|
||||
By switching rng-random to use the same request queue as rng-egd,
|
||||
the unsafe stack-based allocation of the entropy buffer is
|
||||
eliminated and replaced with g_malloc.
|
||||
|
||||
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
|
||||
Reviewed-by: Amit Shah <amit.shah@redhat.com>
|
||||
Message-Id: <1456994238-9585-5-git-send-email-lprosek@redhat.com>
|
||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
||||
---
|
||||
backends/rng-egd.c | 16 ++--------------
|
||||
backends/rng-random.c | 43 +++++++++++++++++++------------------------
|
||||
backends/rng.c | 13 ++++++++++++-
|
||||
include/sysemu/rng.h | 3 +--
|
||||
4 files changed, 34 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/backends/rng-egd.c b/backends/rng-egd.c
|
||||
index 8f2bd16..30332ed 100644
|
||||
--- a/backends/rng-egd.c
|
||||
+++ b/backends/rng-egd.c
|
||||
@@ -27,20 +27,10 @@ typedef struct RngEgd
|
||||
char *chr_name;
|
||||
} RngEgd;
|
||||
|
||||
-static void rng_egd_request_entropy(RngBackend *b, size_t size,
|
||||
- EntropyReceiveFunc *receive_entropy,
|
||||
- void *opaque)
|
||||
+static void rng_egd_request_entropy(RngBackend *b, RngRequest *req)
|
||||
{
|
||||
RngEgd *s = RNG_EGD(b);
|
||||
- RngRequest *req;
|
||||
-
|
||||
- req = g_malloc(sizeof(*req));
|
||||
-
|
||||
- req->offset = 0;
|
||||
- req->size = size;
|
||||
- req->receive_entropy = receive_entropy;
|
||||
- req->opaque = opaque;
|
||||
- req->data = g_malloc(req->size);
|
||||
+ size_t size = req->size;
|
||||
|
||||
while (size > 0) {
|
||||
uint8_t header[2];
|
||||
@@ -54,8 +44,6 @@ static void rng_egd_request_entropy(RngBackend *b, size_t size,
|
||||
|
||||
size -= len;
|
||||
}
|
||||
-
|
||||
- s->parent.requests = g_slist_append(s->parent.requests, req);
|
||||
}
|
||||
|
||||
static int rng_egd_chr_can_read(void *opaque)
|
||||
diff --git a/backends/rng-random.c b/backends/rng-random.c
|
||||
index 8cdad6a..a6cb385 100644
|
||||
--- a/backends/rng-random.c
|
||||
+++ b/backends/rng-random.c
|
||||
@@ -22,10 +22,6 @@ struct RndRandom
|
||||
|
||||
int fd;
|
||||
char *filename;
|
||||
-
|
||||
- EntropyReceiveFunc *receive_func;
|
||||
- void *opaque;
|
||||
- size_t size;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -38,36 +34,35 @@ struct RndRandom
|
||||
static void entropy_available(void *opaque)
|
||||
{
|
||||
RndRandom *s = RNG_RANDOM(opaque);
|
||||
- uint8_t buffer[s->size];
|
||||
- ssize_t len;
|
||||
|
||||
- len = read(s->fd, buffer, s->size);
|
||||
- if (len < 0 && errno == EAGAIN) {
|
||||
- return;
|
||||
- }
|
||||
- g_assert(len != -1);
|
||||
+ while (s->parent.requests != NULL) {
|
||||
+ RngRequest *req = s->parent.requests->data;
|
||||
+ ssize_t len;
|
||||
+
|
||||
+ len = read(s->fd, req->data, req->size);
|
||||
+ if (len < 0 && errno == EAGAIN) {
|
||||
+ return;
|
||||
+ }
|
||||
+ g_assert(len != -1);
|
||||
|
||||
- s->receive_func(s->opaque, buffer, len);
|
||||
- s->receive_func = NULL;
|
||||
+ req->receive_entropy(req->opaque, req->data, len);
|
||||
|
||||
+ rng_backend_finalize_request(&s->parent, req);
|
||||
+ }
|
||||
+
|
||||
+ /* We've drained all requests, the fd handler can be reset. */
|
||||
qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
-static void rng_random_request_entropy(RngBackend *b, size_t size,
|
||||
- EntropyReceiveFunc *receive_entropy,
|
||||
- void *opaque)
|
||||
+static void rng_random_request_entropy(RngBackend *b, RngRequest *req)
|
||||
{
|
||||
RndRandom *s = RNG_RANDOM(b);
|
||||
|
||||
- if (s->receive_func) {
|
||||
- s->receive_func(s->opaque, NULL, 0);
|
||||
+ if (s->parent.requests == NULL) {
|
||||
+ /* If there are no pending requests yet, we need to
|
||||
+ * install our fd handler. */
|
||||
+ qemu_set_fd_handler(s->fd, entropy_available, NULL, s);
|
||||
}
|
||||
-
|
||||
- s->receive_func = receive_entropy;
|
||||
- s->opaque = opaque;
|
||||
- s->size = size;
|
||||
-
|
||||
- qemu_set_fd_handler(s->fd, entropy_available, NULL, s);
|
||||
}
|
||||
|
||||
static void rng_random_opened(RngBackend *b, Error **errp)
|
||||
diff --git a/backends/rng.c b/backends/rng.c
|
||||
index 014cb9d..277a41b 100644
|
||||
--- a/backends/rng.c
|
||||
+++ b/backends/rng.c
|
||||
@@ -20,9 +20,20 @@ void rng_backend_request_entropy(RngBackend *s, size_t size,
|
||||
void *opaque)
|
||||
{
|
||||
RngBackendClass *k = RNG_BACKEND_GET_CLASS(s);
|
||||
+ RngRequest *req;
|
||||
|
||||
if (k->request_entropy) {
|
||||
- k->request_entropy(s, size, receive_entropy, opaque);
|
||||
+ req = g_malloc(sizeof(*req));
|
||||
+
|
||||
+ req->offset = 0;
|
||||
+ req->size = size;
|
||||
+ req->receive_entropy = receive_entropy;
|
||||
+ req->opaque = opaque;
|
||||
+ req->data = g_malloc(req->size);
|
||||
+
|
||||
+ k->request_entropy(s, req);
|
||||
+
|
||||
+ s->requests = g_slist_append(s->requests, req);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h
|
||||
index 08a2eda..4fffd68 100644
|
||||
--- a/include/sysemu/rng.h
|
||||
+++ b/include/sysemu/rng.h
|
||||
@@ -45,8 +45,7 @@ struct RngBackendClass
|
||||
{
|
||||
ObjectClass parent_class;
|
||||
|
||||
- void (*request_entropy)(RngBackend *s, size_t size,
|
||||
- EntropyReceiveFunc *receive_entropy, void *opaque);
|
||||
+ void (*request_entropy)(RngBackend *s, RngRequest *req);
|
||||
|
||||
void (*opened)(RngBackend *s, Error **errp);
|
||||
};
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,107 +0,0 @@
|
||||
https://bugs.gentoo.org/580426
|
||||
https://bugs.gentoo.org/568246
|
||||
|
||||
From a49923d2837d20510d645d3758f1ad87c32d0730 Mon Sep 17 00:00:00 2001
|
||||
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Date: Mon, 18 Apr 2016 09:20:54 +0200
|
||||
Subject: [PATCH] Revert "ehci: make idt processing more robust"
|
||||
|
||||
This reverts commit 156a2e4dbffa85997636a7a39ef12da6f1b40254.
|
||||
|
||||
Breaks FreeBSD.
|
||||
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
---
|
||||
hw/usb/hcd-ehci.c | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
|
||||
index d5c0e1c..43a8f7a 100644
|
||||
--- a/hw/usb/hcd-ehci.c
|
||||
+++ b/hw/usb/hcd-ehci.c
|
||||
@@ -1397,7 +1397,7 @@ static int ehci_process_itd(EHCIState *ehci,
|
||||
{
|
||||
USBDevice *dev;
|
||||
USBEndpoint *ep;
|
||||
- uint32_t i, len, pid, dir, devaddr, endp, xfers = 0;
|
||||
+ uint32_t i, len, pid, dir, devaddr, endp;
|
||||
uint32_t pg, off, ptr1, ptr2, max, mult;
|
||||
|
||||
ehci->periodic_sched_active = PERIODIC_ACTIVE;
|
||||
@@ -1489,10 +1489,9 @@ static int ehci_process_itd(EHCIState *ehci,
|
||||
ehci_raise_irq(ehci, USBSTS_INT);
|
||||
}
|
||||
itd->transact[i] &= ~ITD_XACT_ACTIVE;
|
||||
- xfers++;
|
||||
}
|
||||
}
|
||||
- return xfers ? 0 : -1;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.7.4
|
||||
|
||||
From 1ae3f2f178087711f9591350abad133525ba93f2 Mon Sep 17 00:00:00 2001
|
||||
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Date: Mon, 18 Apr 2016 09:11:38 +0200
|
||||
Subject: [PATCH] ehci: apply limit to iTD/sidt descriptors
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Commit "156a2e4 ehci: make idt processing more robust" tries to avoid a
|
||||
DoS by the guest (create a circular iTD queue and let qemu ehci
|
||||
emulation run in circles forever). Unfortunately this has two problems:
|
||||
First it misses the case of siTDs, and second it reportedly breaks
|
||||
FreeBSD.
|
||||
|
||||
So lets go for a different approach: just count the number of iTDs and
|
||||
siTDs we have seen per frame and apply a limit. That should really
|
||||
catch all cases now.
|
||||
|
||||
Reported-by: 杜少博 <dushaobo@360.cn>
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
---
|
||||
hw/usb/hcd-ehci.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
|
||||
index 159f58d..d5c0e1c 100644
|
||||
--- a/hw/usb/hcd-ehci.c
|
||||
+++ b/hw/usb/hcd-ehci.c
|
||||
@@ -2011,6 +2011,7 @@ static int ehci_state_writeback(EHCIQueue *q)
|
||||
static void ehci_advance_state(EHCIState *ehci, int async)
|
||||
{
|
||||
EHCIQueue *q = NULL;
|
||||
+ int itd_count = 0;
|
||||
int again;
|
||||
|
||||
do {
|
||||
@@ -2035,10 +2036,12 @@ static void ehci_advance_state(EHCIState *ehci, int async)
|
||||
|
||||
case EST_FETCHITD:
|
||||
again = ehci_state_fetchitd(ehci, async);
|
||||
+ itd_count++;
|
||||
break;
|
||||
|
||||
case EST_FETCHSITD:
|
||||
again = ehci_state_fetchsitd(ehci, async);
|
||||
+ itd_count++;
|
||||
break;
|
||||
|
||||
case EST_ADVANCEQUEUE:
|
||||
@@ -2087,7 +2090,8 @@ static void ehci_advance_state(EHCIState *ehci, int async)
|
||||
break;
|
||||
}
|
||||
|
||||
- if (again < 0) {
|
||||
+ if (again < 0 || itd_count > 16) {
|
||||
+ /* TODO: notify guest (raise HSE irq?) */
|
||||
fprintf(stderr, "processing error - resetting ehci HC\n");
|
||||
ehci_reset(ehci);
|
||||
again = 0;
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,16 +0,0 @@
|
||||
https://lists.gnu.org/archive/html/qemu-devel/2016-04/msg01106.html
|
||||
https://bugs.gentoo.org/580040
|
||||
|
||||
diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c
|
||||
index c69f374..ff1e31a 100644
|
||||
--- a/hw/i386/kvmvapic.c
|
||||
+++ b/hw/i386/kvmvapic.c
|
||||
@@ -394,7 +394,7 @@ static void patch_instruction(VAPICROMState *s, X86CPU *cpu, target_ulong ip)
|
||||
CPUX86State *env = &cpu->env;
|
||||
VAPICHandlers *handlers;
|
||||
uint8_t opcode[2];
|
||||
- uint32_t imm32;
|
||||
+ uint32_t imm32 = 0;
|
||||
target_ulong current_pc = 0;
|
||||
target_ulong current_cs_base = 0;
|
||||
int current_flags = 0;
|
@ -1,47 +0,0 @@
|
||||
From 3a15cc0e1ee7168db0782133d2607a6bfa422d66 Mon Sep 17 00:00:00 2001
|
||||
From: Prasad J Pandit <pjp@fedoraproject.org>
|
||||
Date: Fri, 8 Apr 2016 11:33:48 +0530
|
||||
Subject: [PATCH] net: stellaris_enet: check packet length against receive
|
||||
buffer
|
||||
|
||||
When receiving packets over Stellaris ethernet controller, it
|
||||
uses receive buffer of size 2048 bytes. In case the controller
|
||||
accepts large(MTU) packets, it could lead to memory corruption.
|
||||
Add check to avoid it.
|
||||
|
||||
Reported-by: Oleksandr Bazhaniuk <oleksandr.bazhaniuk@intel.com>
|
||||
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
|
||||
Message-id: 1460095428-22698-1-git-send-email-ppandit@redhat.com
|
||||
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
|
||||
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
|
||||
---
|
||||
hw/net/stellaris_enet.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
|
||||
index 84cf60b..6880894 100644
|
||||
--- a/hw/net/stellaris_enet.c
|
||||
+++ b/hw/net/stellaris_enet.c
|
||||
@@ -236,8 +236,18 @@ static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, si
|
||||
n = s->next_packet + s->np;
|
||||
if (n >= 31)
|
||||
n -= 31;
|
||||
- s->np++;
|
||||
|
||||
+ if (size >= sizeof(s->rx[n].data) - 6) {
|
||||
+ /* If the packet won't fit into the
|
||||
+ * emulated 2K RAM, this is reported
|
||||
+ * as a FIFO overrun error.
|
||||
+ */
|
||||
+ s->ris |= SE_INT_FOV;
|
||||
+ stellaris_enet_update(s);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ s->np++;
|
||||
s->rx[n].len = size + 6;
|
||||
p = s->rx[n].data;
|
||||
*(p++) = (size + 6);
|
||||
--
|
||||
2.7.4
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/sbin/runscript
|
||||
#!/sbin/openrc-run
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/qemu/files/qemu-binfmt.initd-r1,v 1.5 2014/08/04 06:47:22 vapier Exp $
|
||||
# $Id$
|
||||
|
||||
# enable automatic i386/ARM/M68K/MIPS/SPARC/PPC/s390 program execution by the kernel
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
# Copyright 1999-2016 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Id$
|
||||
|
||||
EAPI=5
|
||||
EAPI="5"
|
||||
|
||||
#MY_P="${P/_/-}"
|
||||
|
||||
@ -14,16 +13,12 @@ PLOCALES="de_DE fr_FR hu it tr zh_CN"
|
||||
inherit eutils flag-o-matic linux-info toolchain-funcs multilib python-r1 \
|
||||
user udev fcaps readme.gentoo pax-utils l10n
|
||||
|
||||
BACKPORTS=
|
||||
|
||||
if [[ ${PV} = *9999* ]]; then
|
||||
EGIT_REPO_URI="git://git.qemu.org/qemu.git"
|
||||
inherit git-2
|
||||
SRC_URI=""
|
||||
else
|
||||
SRC_URI="http://wiki.qemu-project.org/download/${P}.tar.bz2
|
||||
${BACKPORTS:+
|
||||
https://dev.gentoo.org/~cardoe/distfiles/${P}-${BACKPORTS}.tar.xz}"
|
||||
SRC_URI="http://wiki.qemu-project.org/download/${P}.tar.bz2"
|
||||
KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86 ~x86-fbsd"
|
||||
fi
|
||||
|
||||
@ -86,8 +81,8 @@ SOFTMMU_LIB_DEPEND="${COMMON_LIB_DEPEND}
|
||||
fdt? ( >=sys-apps/dtc-1.4.0[static-libs(+)] )
|
||||
glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
|
||||
gnutls? (
|
||||
dev-libs/nettle[static-libs(+)]
|
||||
>=net-libs/gnutls-3.0[static-libs(+)]
|
||||
dev-libs/nettle:=[static-libs(+)]
|
||||
>=net-libs/gnutls-3.0:=[static-libs(+)]
|
||||
)
|
||||
gtk? (
|
||||
gtk2? (
|
||||
@ -336,15 +331,6 @@ src_prepare() {
|
||||
Makefile Makefile.target || die
|
||||
|
||||
epatch "${FILESDIR}"/qemu-2.5.0-cflags.patch
|
||||
[[ -n ${BACKPORTS} ]] && \
|
||||
EPATCH_FORCE=yes EPATCH_SUFFIX="patch" EPATCH_SOURCE="${S}/patches" \
|
||||
epatch
|
||||
|
||||
epatch "${FILESDIR}"/${PN}-2.5.0-CVE-2016-2198.patch #573314
|
||||
epatch "${FILESDIR}"/${PN}-2.5.0-rng-stack-corrupt-{0,1,2,3}.patch #576420
|
||||
epatch "${FILESDIR}"/${PN}-2.5.1-stellaris_enet-overflow.patch #579614
|
||||
epatch "${FILESDIR}"/${PN}-2.5.1-CVE-2016-4020.patch #580040
|
||||
epatch "${FILESDIR}"/${PN}-2.5.1-CVE-2015-8558.patch #568246 #580426
|
||||
epatch "${FILESDIR}"/${PN}-2.5.0-sysmacros.patch
|
||||
|
||||
# Fix ld and objcopy being called directly
|
Loading…
Reference in New Issue
Block a user