numa: Check for qemu_strtosz_MiB error
As shown in the previous commit, qemu_strtosz_MiB sometimes leaves the
result value untouched (we have to audit further to learn that in that
case, the QAPI generator says that visit_type_NumaOptions() will have
zero-initialized it), and sometimes leaves it with the value of a
partial parse before -EINVAL occurs because of trailing garbage.
Rather than blindly treating any string the user may throw at us as
valid, we should check for parse failures.
Fixes: cc001888
("numa: fixup parsed NumaNodeOptions earlier", v2.11.0)
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Message-Id: <20230522190441.64278-14-eblake@redhat.com>
This commit is contained in:
parent
f49371ecae
commit
a73049b2a1
@ -531,10 +531,17 @@ static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
|
|||||||
/* Fix up legacy suffix-less format */
|
/* Fix up legacy suffix-less format */
|
||||||
if ((object->type == NUMA_OPTIONS_TYPE_NODE) && object->u.node.has_mem) {
|
if ((object->type == NUMA_OPTIONS_TYPE_NODE) && object->u.node.has_mem) {
|
||||||
const char *mem_str = qemu_opt_get(opts, "mem");
|
const char *mem_str = qemu_opt_get(opts, "mem");
|
||||||
qemu_strtosz_MiB(mem_str, NULL, &object->u.node.mem);
|
int ret = qemu_strtosz_MiB(mem_str, NULL, &object->u.node.mem);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
error_setg_errno(&err, -ret, "could not parse memory size '%s'",
|
||||||
|
mem_str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!err) {
|
||||||
set_numa_options(ms, object, &err);
|
set_numa_options(ms, object, &err);
|
||||||
|
}
|
||||||
|
|
||||||
qapi_free_NumaOptions(object);
|
qapi_free_NumaOptions(object);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user