[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 02/10] dbus-vmstate: Increase the size of input stream buffer used
From: |
marcandre . lureau |
Subject: |
[PULL 02/10] dbus-vmstate: Increase the size of input stream buffer used during load |
Date: |
Sun, 28 Mar 2021 22:45:25 +0400 |
From: Priyankar Jain <priyankar.jain@nutanix.com>
This commit fixes an issue where migration is failing in the load phase
because of a false alarm about data unavailability.
Following is the error received when the amount of data to be transferred
exceeds the default buffer size setup by G_BUFFERED_INPUT_STREAM(4KiB),
even when the maximum data size supported by this backend is 1MiB
(DBUS_VMSTATE_SIZE_LIMIT):
dbus_vmstate_post_load: Invalid vmstate size: 4364
qemu-kvm: error while loading state for instance 0x0 of device
'dbus-vmstate/dbus-vmstate'
This commit sets the size of the input stream buffer used during load to
DBUS_VMSTATE_SIZE_LIMIT which is the maximum amount of data a helper can
send during save phase.
Secondly, this commit makes sure that the input stream buffer is loaded before
checking the size of the data available in it, rectifying the false alarm about
data unavailability.
Fixes: 5010cec2bc87 ("Add dbus-vmstate object")
Signed-off-by: Priyankar Jain <priyankar.jain@nutanix.com>
Message-Id:
<cdaad4718e62bf22fd5e93ef3e252de20da5c17c.1612273156.git.priyankar.jain@nutanix.com>
[ Modified printf format for gsize ]
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
backends/dbus-vmstate.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/backends/dbus-vmstate.c b/backends/dbus-vmstate.c
index 2a0d2e4a31..9cfd758c42 100644
--- a/backends/dbus-vmstate.c
+++ b/backends/dbus-vmstate.c
@@ -204,6 +204,8 @@ static int dbus_vmstate_post_load(void *opaque, int
version_id)
m = g_memory_input_stream_new_from_data(self->data, self->data_size, NULL);
s = g_data_input_stream_new(m);
g_data_input_stream_set_byte_order(s, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
+ g_buffered_input_stream_set_buffer_size(G_BUFFERED_INPUT_STREAM(s),
+ DBUS_VMSTATE_SIZE_LIMIT);
nelem = g_data_input_stream_read_uint32(s, NULL, &err);
if (err) {
@@ -244,11 +246,23 @@ static int dbus_vmstate_post_load(void *opaque, int
version_id)
}
len = g_data_input_stream_read_uint32(s, NULL, &err);
+ if (len > DBUS_VMSTATE_SIZE_LIMIT) {
+ error_report("%s: Invalid vmstate size: %u", __func__, len);
+ return -1;
+ }
+
+ g_buffered_input_stream_fill(G_BUFFERED_INPUT_STREAM(s), len, NULL,
+ &err);
+ if (err) {
+ goto error;
+ }
+
avail = g_buffered_input_stream_get_available(
G_BUFFERED_INPUT_STREAM(s));
-
- if (len > DBUS_VMSTATE_SIZE_LIMIT || len > avail) {
- error_report("%s: Invalid vmstate size: %u", __func__, len);
+ if (len > avail) {
+ error_report("%s: Not enough data available to load for Id: '%s'. "
+ "Available data size: %zu, Actual vmstate size: %u",
+ __func__, id, avail, len);
return -1;
}
--
2.29.0
- [PULL 00/10] For 6.0 patches, marcandre . lureau, 2021/03/28
- [PULL 01/10] util: fix use-after-free in module_load_one, marcandre . lureau, 2021/03/28
- [PULL 02/10] dbus-vmstate: Increase the size of input stream buffer used during load,
marcandre . lureau <=
- [PULL 03/10] sphinx: adopt kernel readthedoc theme, marcandre . lureau, 2021/03/28
- [PULL 04/10] docs: simplify each section title, marcandre . lureau, 2021/03/28
- [PULL 05/10] yank: Remove dependency on qiochannel, marcandre . lureau, 2021/03/28
- [PULL 06/10] yank: Always link full yank code, marcandre . lureau, 2021/03/28
- [PULL 07/10] chardev/char.c: Move object_property_try_add_child out of chardev_new, marcandre . lureau, 2021/03/28
- [PULL 08/10] chardev/char.c: Always pass id to chardev_new, marcandre . lureau, 2021/03/28
- [PULL 09/10] chardev: Fix yank with the chardev-change case, marcandre . lureau, 2021/03/28
- [PULL 10/10] tests: Add tests for yank with the chardev-change case, marcandre . lureau, 2021/03/28
- Re: [PULL 00/10] For 6.0 patches, no-reply, 2021/03/28
- Re: [PULL 00/10] For 6.0 patches, Peter Maydell, 2021/03/29