From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Thomas Huth" <thuth@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Michael Roth" <michael.roth@amd.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Konstantin Kostiuk" <kkostiuk@redhat.com>
Subject: [PATCH v3 00/22] qga: clean up command source locations and conditionals
Date: Fri, 12 Jul 2024 14:24:37 +0100 [thread overview]
Message-ID: <20240712132459.3974109-1-berrange@redhat.com> (raw)
This series is a side effect of other work I started, to attempt to
make the QGA safe to use in confidential VMs by automatically
restricting the permitted commands. Since this cleanup stands on
its own, I'm sending it now.
The QGA codebase has a very complicated maze of #ifdefs to create
stubs for the various commands that cannot be implemented on certain
platforms. It then has further logic to dynamically disable the stub
commands at runtime, except this is not consistently applied, so
some commands remain enabled despite being merely stubs.
The resulting code is hard to follow, when trying to understand exactly
what commands are available under what circumstances, and when changing
impls it is easy to get the #ifdefs wrong, resulting in stubs getting
missed on platforms without a real impl. In some cases, we have multiple
stubs for the same command, due to the maze of #ifdefs.
The QAPI schema language has support for many years for expressing
conditions against commands when declaring them. This results in the
QAPI code generator omitting their implementation entirely at build
time. This has mutliple benefits
* The unsupported commands are guaranteed to not exist at runtime
* No stubs need ever be defined in the code
* The generated QAPI reference manual documents the build conditions
This series is broadly split into three parts
* Moving tonnes of Linux only commands out of commands-posix.c
into commands-linux.c to remove many #ifdefs.
* Adding 'if' conditions in the QAPI schema to reflect the
build conditions, removing many more #ifdefs
* Sanitizing the logic for disabling/enabling commands at
runtime to guarantee consistency
Changed in v3:
- Fix missing --help output for new -c / --config arg
- Fix typos
- Avoid repeated qmp_command_is_enabled call
Changed in v2:
- Make FSFreeze error reporting distinguish inability to enable
VSS from user config choice
- Fully remove ga_command_init_blockedrpcs() methods. No more
special case disabling of commands. Either they're disabled
at build time, or disabled by user config, or by well defined
rule ie not permitted during FS freeze.
- Apply rules later in startup to avoid crash from NULL config
pointer
- Document changed error messages in commit messages
- Add -c / --config command line parameter
- Fix mistaken enabling of fsfreeze hooks on win32
Daniel P. Berrangé (22):
qga: drop blocking of guest-get-memory-block-size command
qga: move linux vcpu command impls to commands-linux.c
qga: move linux suspend command impls to commands-linux.c
qga: move linux fs/disk command impls to commands-linux.c
qga: move linux disk/cpu stats command impls to commands-linux.c
qga: move linux memory block command impls to commands-linux.c
qga: move CONFIG_FSFREEZE/TRIM to be meson defined options
qga: conditionalize schema for commands unsupported on Windows
qga: conditionalize schema for commands unsupported on non-Linux POSIX
qga: conditionalize schema for commands requiring getifaddrs
qga: conditionalize schema for commands requiring linux/win32
qga: conditionalize schema for commands only supported on Windows
qga: conditionalize schema for commands requiring fsfreeze
qga: conditionalize schema for commands requiring fstrim
qga: conditionalize schema for commands requiring libudev
qga: conditionalize schema for commands requiring utmpx
qga: conditionalize schema for commands not supported on other UNIX
qga: don't disable fsfreeze commands if vss_init fails
qga: move declare of QGAConfig struct to top of file
qga: remove pointless 'blockrpcs_key' variable
qga: allow configuration file path via the cli
qga: centralize logic for disabling/enabling commands
docs/interop/qemu-ga.rst | 19 +
meson.build | 16 +
qga/commands-bsd.c | 24 -
qga/commands-common.h | 9 -
qga/commands-linux.c | 1805 +++++++++++++++++++++++++++++
qga/commands-posix.c | 2373 +++-----------------------------------
qga/commands-win32.c | 78 +-
qga/main.c | 224 ++--
qga/qapi-schema.json | 153 ++-
9 files changed, 2240 insertions(+), 2461 deletions(-)
--
2.45.1
next reply other threads:[~2024-07-12 13:25 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-12 13:24 Daniel P. Berrangé [this message]
2024-07-12 13:24 ` [PATCH v3 01/22] qga: drop blocking of guest-get-memory-block-size command Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 02/22] qga: move linux vcpu command impls to commands-linux.c Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 03/22] qga: move linux suspend " Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 04/22] qga: move linux fs/disk " Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 05/22] qga: move linux disk/cpu stats " Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 06/22] qga: move linux memory block " Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 07/22] qga: move CONFIG_FSFREEZE/TRIM to be meson defined options Daniel P. Berrangé
2024-07-19 7:34 ` Konstantin Kostiuk
2024-07-12 13:24 ` [PATCH v3 08/22] qga: conditionalize schema for commands unsupported on Windows Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 09/22] qga: conditionalize schema for commands unsupported on non-Linux POSIX Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 10/22] qga: conditionalize schema for commands requiring getifaddrs Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 11/22] qga: conditionalize schema for commands requiring linux/win32 Daniel P. Berrangé
2024-07-19 7:35 ` Konstantin Kostiuk
2024-07-12 13:24 ` [PATCH v3 12/22] qga: conditionalize schema for commands only supported on Windows Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 13/22] qga: conditionalize schema for commands requiring fsfreeze Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 14/22] qga: conditionalize schema for commands requiring fstrim Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 15/22] qga: conditionalize schema for commands requiring libudev Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 16/22] qga: conditionalize schema for commands requiring utmpx Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 17/22] qga: conditionalize schema for commands not supported on other UNIX Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 18/22] qga: don't disable fsfreeze commands if vss_init fails Daniel P. Berrangé
2024-07-19 7:35 ` Konstantin Kostiuk
2024-07-12 13:24 ` [PATCH v3 19/22] qga: move declare of QGAConfig struct to top of file Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 20/22] qga: remove pointless 'blockrpcs_key' variable Daniel P. Berrangé
2024-07-12 13:24 ` [PATCH v3 21/22] qga: allow configuration file path via the cli Daniel P. Berrangé
2024-07-19 7:35 ` Konstantin Kostiuk
2024-07-12 13:24 ` [PATCH v3 22/22] qga: centralize logic for disabling/enabling commands Daniel P. Berrangé
2024-07-19 7:36 ` Konstantin Kostiuk
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=20240712132459.3974109-1-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=kkostiuk@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).