From: Markus Armbruster <armbru@redhat.com>
To: Rohit Kumar <rohit.kumar3@nutanix.com>
Cc: eduardo@habkost.net, thuth@redhat.com, berrange@redhat.com,
prerna.saxena@nutanix.com, qemu-devel@nongnu.org,
prachatos.mitra@nutanix.com, pbonzini@redhat.com
Subject: Re: [PATCH v2] Check and report for incomplete 'global' option format
Date: Tue, 15 Feb 2022 10:30:18 +0100 [thread overview]
Message-ID: <87sfskeatx.fsf@pond.sub.org> (raw)
In-Reply-To: <20220215055138.267904-1-rohit.kumar3@nutanix.com> (Rohit Kumar's message of "Mon, 14 Feb 2022 21:51:38 -0800")
Rohit Kumar <rohit.kumar3@nutanix.com> writes:
> Qemu might crash when provided incomplete '-global' option.
> For example:
> qemu-system-x86_64 -global driver=isa-fdc
> qemu-system-x86_64: ../../devel/qemu/qapi/string-input-visitor.c:394:
> string_input_visitor_new: Assertion `str' failed.
> Aborted (core dumped)
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/604
The original qemu_global_option() only ever created QemuOpts with all
three options present. Code consuming these QemuOpts relies on this
invariant. Commit 3751d7c43f "vl: allow full-blown QemuOpts syntax for
-global" (v2.4.0) wrecked it.
Let's point to the root cause:
Fixes: 3751d7c43f795b45ffdb9429cfb09c6beea55c68
> Signed-off-by: Rohit Kumar <rohit.kumar3@nutanix.com>
> ---
> diff to v1:
> - Removed '\n' from error log message.
>
> softmmu/qdev-monitor.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c
> index 01f3834db5..51b33caeca 100644
> --- a/softmmu/qdev-monitor.c
> +++ b/softmmu/qdev-monitor.c
> @@ -1020,6 +1020,7 @@ int qemu_global_option(const char *str)
> char driver[64], property[64];
> QemuOpts *opts;
> int rc, offset;
> + Error *err = NULL;
>
> rc = sscanf(str, "%63[^.=].%63[^=]%n", driver, property, &offset);
> if (rc == 2 && str[offset] == '=') {
> @@ -1031,7 +1032,12 @@ int qemu_global_option(const char *str)
> }
>
> opts = qemu_opts_parse_noisily(&qemu_global_opts, str, false);
> - if (!opts) {
> + if (!opts || !qemu_opt_get(opts, "driver") || !qemu_opt_get(opts,"property") ||
> + !qemu_opt_get(opts, "value")) {
> + error_setg(&err, "Invalid 'global' option format! "
> + "Use -global <driver>.<property>=<value> or "
> + "-global driver=driver,property=property,value=value");
> + error_report_err(err);
> return -1;
> }
This fix isn't quite right.
When qemu_opts_parse_noisily() fails, it reports an error and returns
null. Your patch reports a second error then. Reproducer:
$ qemu-system-x86_64 -global =
qemu-system-x86_64: -global =: Invalid parameter ''
qemu-system-x86_64: -global =: Invalid 'global' option format! Use -global <driver>.<property>=<value> or -global driver=driver,property=property,value=value
You should do something like
opts = qemu_opts_parse_noisily(&qemu_global_opts, str, false);
if (!opts) {
return -1;
}
if (!qemu_opt_get(opts, "driver")
|| !qemu_opt_get(opts, "property")
|| !qemu_opt_get(opts, "value")) {
error_report("options 'driver', 'property', and 'value'"
" are required');
return -1;
}
next prev parent reply other threads:[~2022-02-15 9:32 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-15 5:51 [PATCH v2] Check and report for incomplete 'global' option format Rohit Kumar
2022-02-15 9:30 ` Markus Armbruster [this message]
2022-02-16 6:00 ` Rohit Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sfskeatx.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=eduardo@habkost.net \
--cc=pbonzini@redhat.com \
--cc=prachatos.mitra@nutanix.com \
--cc=prerna.saxena@nutanix.com \
--cc=qemu-devel@nongnu.org \
--cc=rohit.kumar3@nutanix.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.