From: Markus Armbruster <armbru@redhat.com>
To: marcandre.lureau@redhat.com
Cc: qemu-devel@nongnu.org, "Hanna Reitz" <hreitz@redhat.com>,
"Christian Schoenebeck" <qemu_oss@crudebyte.com>,
"Fam Zheng" <fam@euphon.net>, "Song Gao" <gaosong@loongson.cn>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
"Mahmoud Mandour" <ma.mandourr@gmail.com>,
qemu-block@nongnu.org, "Laurent Vivier" <laurent@vivier.eu>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Vladimir Sementsov-Ogievskiy" <vsementsov@yandex-team.ru>,
"Greg Kurz" <groug@kaod.org>,
"Eugenio Pérez" <eperezma@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Bin Meng" <bmeng.cn@gmail.com>,
"Fabiano Rosas" <farosas@suse.de>,
"Eric Blake" <eblake@redhat.com>,
"Hyman Huang" <yong.huang@smartx.com>,
"Kevin Wolf" <kwolf@redhat.com>,
"Stefano Garzarella" <sgarzare@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Alexandre Iooss" <erdnaxe@crans.org>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"John Snow" <jsnow@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Jesper Devantier" <foss@defmacro.it>,
"Peter Xu" <peterx@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Klaus Jensen" <its@irrelevant.dk>,
"Keith Busch" <kbusch@kernel.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Yuval Shaia" <yuval.shaia.ml@gmail.com>,
"Bin Meng" <bin.meng@windriver.com>
Subject: Re: [PATCH v3 21/22] qom/object: fix -Werror=maybe-uninitialized
Date: Wed, 02 Oct 2024 08:21:22 +0200 [thread overview]
Message-ID: <87wmir9g9p.fsf@pond.sub.org> (raw)
In-Reply-To: <20240930081458.1926382-22-marcandre.lureau@redhat.com> (marcandre lureau's message of "Mon, 30 Sep 2024 12:14:56 +0400")
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> object_resolve_path_type() didn't always set *ambiguousp.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Fixes: 81c48dd79655 (hw/i386/acpi: Add object_resolve_type_unambiguous to improve modularity)
> ---
> qom/object.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/qom/object.c b/qom/object.c
> index 28c5b66eab..bdc8a2c666 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -2201,6 +2201,9 @@ Object *object_resolve_path_type(const char *path, const char *typename,
> }
> } else {
> obj = object_resolve_abs_path(object_get_root(), parts + 1, typename);
> + if (ambiguousp) {
> + *ambiguousp = false;
> + }
> }
>
> g_strfreev(parts);
> @@ -2226,7 +2229,7 @@ Object *object_resolve_path_at(Object *parent, const char *path)
>
> Object *object_resolve_type_unambiguous(const char *typename, Error **errp)
> {
> - bool ambig;
> + bool ambig = false;
> Object *o = object_resolve_path_type("", typename, &ambig);
>
> if (ambig) {
Contract:
/**
* object_resolve_path_type:
* @path: the path to resolve
* @typename: the type to look for.
* @ambiguous: returns true if the path resolution failed because of an
* ambiguous match
*
* This is similar to object_resolve_path. However, when looking for a
* partial path only matches that implement the given type are considered.
* This restricts the search and avoids spuriously flagging matches as
* ambiguous.
*
* For both partial and absolute paths, the return value goes through
* a dynamic cast to @typename. This is important if either the link,
* or the typename itself are of interface types.
*
* Returns: The matched object or NULL on path lookup failure.
*/
Note the parameter is called @ambiguous here, but @ambiguousp in the
definition. Bad practice.
All the contract promises is that true will be stored in the variable
passed to @ambiguous when the function fails in a certain way. For that
to work, the variable must be initialized to false.
You found a caller that doesn't: object_resolve_type_unambiguous().
This is a bug. There might be more. Impact is not obvious.
Two ways to fix:
1. Find all callers that don't, and fix them. Your first hunk is then
superfluous. Your second hunk fixes the one you already found.
2. Change the contract so callers don't have to initialize. Your second
hunk is then superfluous. The update to the contract is missing.
While there: the contract fails to specify that @ambiguous may be null.
Needs fixing, too.
Same for object_resolve_path().
next prev parent reply other threads:[~2024-10-02 6:21 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-30 8:14 [PATCH v3 00/22] -Werror=maybe-uninitialized fixes marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 01/22] util/coroutine: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 02/22] util/timer: " marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 03/22] hw/qxl: fix -Werror=maybe-uninitialized false-positives marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 04/22] nbd: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 05/22] block/mirror: " marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 06/22] " marcandre.lureau
2024-09-30 8:50 ` Vladimir Sementsov-Ogievskiy
2024-09-30 8:14 ` [PATCH v3 07/22] block/stream: fix -Werror=maybe-uninitialized false-positives marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 08/22] hw/ahci: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 09/22] hw/vhost-scsi: fix -Werror=maybe-uninitialized marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 10/22] hw/sdhci: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-09-30 12:59 ` Alex Bennée
2024-09-30 8:14 ` [PATCH v3 11/22] block/block-copy: " marcandre.lureau
2024-09-30 8:51 ` Vladimir Sementsov-Ogievskiy
2024-09-30 8:14 ` [PATCH v3 12/22] migration: fix -Werror=maybe-uninitialized false-positives marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 13/22] hw/virtio-blk: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 14/22] migration: " marcandre.lureau
2024-09-30 8:14 ` [PATCH v3 15/22] linux-user/hppa: " marcandre.lureau
2024-09-30 12:18 ` Laurent Vivier
2024-09-30 13:26 ` Marc-André Lureau
2024-10-01 9:20 ` Laurent Vivier
2024-09-30 8:14 ` [PATCH v3 16/22] target/loongarch: " marcandre.lureau
2024-10-01 13:31 ` Vladimir Sementsov-Ogievskiy
2024-09-30 8:14 ` [PATCH v3 17/22] tests: " marcandre.lureau
2024-09-30 8:53 ` Vladimir Sementsov-Ogievskiy
2024-09-30 8:14 ` [PATCH v3 18/22] hw/virtio: fix -Werror=maybe-uninitialized marcandre.lureau
2024-09-30 8:28 ` Stefano Garzarella
2024-09-30 8:14 ` [PATCH v3 19/22] RFC: hw/virtio: a potential leak fix marcandre.lureau
2024-09-30 11:02 ` Eugenio Perez Martin
2024-09-30 11:04 ` Eugenio Perez Martin
2024-09-30 11:29 ` Marc-André Lureau
2024-09-30 8:14 ` [PATCH v3 20/22] block: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-10-01 13:34 ` Vladimir Sementsov-Ogievskiy
2024-10-02 8:32 ` Kevin Wolf
2024-09-30 8:14 ` [PATCH v3 21/22] qom/object: fix -Werror=maybe-uninitialized marcandre.lureau
2024-10-01 14:04 ` Vladimir Sementsov-Ogievskiy
2024-10-01 15:22 ` Marc-André Lureau
2024-10-02 7:00 ` Vladimir Sementsov-Ogievskiy
2024-10-02 6:21 ` Markus Armbruster [this message]
2024-10-02 7:00 ` Marc-André Lureau
2024-10-02 7:08 ` Markus Armbruster
2024-09-30 8:14 ` [PATCH v3 22/22] fsdep/9p: fix -Werror=maybe-uninitialized false-positive marcandre.lureau
2024-09-30 9:26 ` Christian Schoenebeck via
2024-09-30 9:35 ` Marc-André Lureau
2024-10-01 13:27 ` [PATCH v3 00/22] -Werror=maybe-uninitialized fixes Marc-André Lureau
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=87wmir9g9p.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=berrange@redhat.com \
--cc=bin.meng@windriver.com \
--cc=bmeng.cn@gmail.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=eperezma@redhat.com \
--cc=erdnaxe@crans.org \
--cc=fam@euphon.net \
--cc=farosas@suse.de \
--cc=foss@defmacro.it \
--cc=gaosong@loongson.cn \
--cc=groug@kaod.org \
--cc=hreitz@redhat.com \
--cc=its@irrelevant.dk \
--cc=jsnow@redhat.com \
--cc=kbusch@kernel.org \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=laurent@vivier.eu \
--cc=ma.mandourr@gmail.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu_oss@crudebyte.com \
--cc=sgarzare@redhat.com \
--cc=stefanha@redhat.com \
--cc=vsementsov@yandex-team.ru \
--cc=yong.huang@smartx.com \
--cc=yuval.shaia.ml@gmail.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.