mirror of https://gitee.com/openkylin/qemu.git
hostmem: fix QEMU crash by 'info memdev'
'info memdev' crashes QEMU: (qemu) info memdev Unexpected error in parse_str() at qapi/string-input-visitor.c:111: Parameter 'null' expects an int64 value or range It is caused by null uint16List is returned if 'host-nodes' is the default value Return MAX_NODES under this case to fix this bug Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
aa5cb7f5e8
commit
1454d33f05
|
@ -64,6 +64,14 @@ out:
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint16List **host_memory_append_node(uint16List **node,
|
||||||
|
unsigned long value)
|
||||||
|
{
|
||||||
|
*node = g_malloc0(sizeof(**node));
|
||||||
|
(*node)->value = value;
|
||||||
|
return &(*node)->next;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
host_memory_backend_get_host_nodes(Object *obj, Visitor *v, const char *name,
|
host_memory_backend_get_host_nodes(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
|
@ -74,13 +82,12 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *v, const char *name,
|
||||||
unsigned long value;
|
unsigned long value;
|
||||||
|
|
||||||
value = find_first_bit(backend->host_nodes, MAX_NODES);
|
value = find_first_bit(backend->host_nodes, MAX_NODES);
|
||||||
if (value == MAX_NODES) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
*node = g_malloc0(sizeof(**node));
|
node = host_memory_append_node(node, value);
|
||||||
(*node)->value = value;
|
|
||||||
node = &(*node)->next;
|
if (value == MAX_NODES) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
value = find_next_bit(backend->host_nodes, MAX_NODES, value + 1);
|
value = find_next_bit(backend->host_nodes, MAX_NODES, value + 1);
|
||||||
|
@ -88,11 +95,10 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *v, const char *name,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
*node = g_malloc0(sizeof(**node));
|
node = host_memory_append_node(node, value);
|
||||||
(*node)->value = value;
|
|
||||||
node = &(*node)->next;
|
|
||||||
} while (true);
|
} while (true);
|
||||||
|
|
||||||
|
out:
|
||||||
visit_type_uint16List(v, name, &host_nodes, errp);
|
visit_type_uint16List(v, name, &host_nodes, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue