[libvirt PATCH] qemu: qemuDomainSetLaunchSecurityState: do not lookup qemuCaps in cache
by Ján Tomko
Any active domain has a copy in the privateData, filled in
qemuProcessInit.
Move the qemu capability check below the activeness check and remove
the extra lookup.
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
src/qemu/qemu_driver.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index cbd17c10ae..acaa6f7629 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19975,12 +19975,12 @@ qemuDomainSetLaunchSecurityState(virDomainPtr domain,
virDomainObj *vm;
int ret = -1;
int rc;
- g_autoptr(virQEMUCaps) qemucaps = NULL;
const char *secrethdr = NULL;
const char *secret = NULL;
unsigned long long setaddr = 0;
bool hasSetaddr = false;
int state;
+ qemuDomainObjPrivate *priv;
virCheckFlags(0, -1);
if (virTypedParamsValidate(params, nparams,
@@ -19996,6 +19996,8 @@ qemuDomainSetLaunchSecurityState(virDomainPtr domain,
if (!(vm = qemuDomainObjFromDomain(domain)))
goto cleanup;
+ priv = vm->privateData;
+
if (virDomainSetLaunchSecurityStateEnsureACL(domain->conn, vm->def) < 0)
goto cleanup;
@@ -20007,17 +20009,6 @@ qemuDomainSetLaunchSecurityState(virDomainPtr domain,
goto cleanup;
}
- if (!(qemucaps = virQEMUCapsCacheLookupDefault(driver->qemuCapsCache,
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL)))
- goto cleanup;
-
- if (!virQEMUCapsGet(qemucaps, QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET)) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("QEMU does not support setting a launch secret"));
- goto cleanup;
- }
-
if (virTypedParamsGetString(params, nparams,
VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET_HEADER,
&secrethdr) < 0 ||
@@ -20050,6 +20041,12 @@ qemuDomainSetLaunchSecurityState(virDomainPtr domain,
goto endjob;
}
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET)) {
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+ _("QEMU does not support setting a launch secret"));
+ goto cleanup;
+ }
+
qemuDomainObjEnterMonitor(driver, vm);
rc = qemuMonitorSetLaunchSecurityState(QEMU_DOMAIN_PRIVATE(vm)->mon,
secrethdr, secret, setaddr, hasSetaddr);
--
2.34.1
2 years, 9 months
[PATCH] kbase: debuglogs: Add note about sensitive information in the logs
by Peter Krempa
Outline information commonly logged which users could consider
sensitive.
Add a note that VNC/SPICE passwords are logged in plaintext.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
docs/kbase/debuglogs.rst | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/docs/kbase/debuglogs.rst b/docs/kbase/debuglogs.rst
index c361c698c5..00dbc9bbf7 100644
--- a/docs/kbase/debuglogs.rst
+++ b/docs/kbase/debuglogs.rst
@@ -300,6 +300,8 @@ Now you should go and reproduce the bug. Once you're finished, attach:
- If you are asked for client logs, ``/tmp/libvirt_client.log``.
- Ideally don't tear down the environment in case additional information is
required.
+- Consider whether you consider any of the information in the debug logs
+ sensitive: `Sensitive information in debug logs`_.
Example filter settings
=======================
@@ -339,3 +341,25 @@ This filter logs only QMP traffic and skips most of libvirt's messages.
::
2:qemu.qemu_monitor 3:*
+
+Sensitive information in debug logs
+===================================
+
+Debug logs may contain information that certain users may consider sensitive
+although generally it's okay to share debuglogs publicly.
+
+Information which could be deemed sensitive:
+
+ - hostname of the host
+ - names of VMs and other objects
+ - paths to disk images
+ - IP addresses of guests and the host
+ - hostnames/IP addresses of disks accessed via network
+
+
+Libvirt's debug logs only ever have passwords and disk encryption secrets in
+encrypted form without the key being part of the log. There's one notable
+exception, that ``VNC/SPICE`` passwords can be found in the logs.
+
+In case you decide to mask information you consider sensitive from the posted
+debug logs, make sure that the masking doesn't introduce ambiguity.
--
2.34.1
2 years, 9 months
[libvirt PATCH] conf: network: remove hostname validation
by Ján Tomko
We used to validate that the first character of the hostname is a
letter. Later, RFC1123 relaxed the requirements to allow a number
as well.
Drop the validation completely, since we do not care about the
following characters, and neither does dnsmasq (even if it's a comma,
which is a delimiter in the hosts file).
Reverts: 673b74be5fda928da5e9f3c2cfbf6c1cb1eda0c6
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
src/conf/network_conf.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index c769bbaeb5..8f50e22be5 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -548,12 +548,6 @@ virNetworkDHCPHostDefParseXML(const char *networkName,
}
name = virXMLPropString(node, "name");
- if (name && !(g_ascii_isalpha(name[0]) || g_ascii_isdigit(name[0]))) {
- virReportError(VIR_ERR_XML_ERROR,
- _("Cannot use host name '%s' in network '%s'"),
- name, networkName);
- return -1;
- }
ip = virXMLPropString(node, "ip");
if (ip && (virSocketAddrParse(&inaddr, ip, AF_UNSPEC) < 0)) {
--
2.31.1
2 years, 9 months
[PATCH] lib: Drop '&*' from '&*variable'
by Michal Privoznik
Apparently, some of '&*variable' slipped in. Drop '&*' and access
the variable directly.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/qemu/qemu_domain.c | 2 +-
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_migration_cookie.c | 2 +-
src/rpc/virnetclientstream.c | 8 ++++----
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index aa8f6b8d05..6b915d7535 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1765,7 +1765,7 @@ qemuStorageSourcePrivateDataAssignSecinfo(qemuDomainSecretInfo **secinfo,
*secinfo = g_new0(qemuDomainSecretInfo, 1);
}
- (*secinfo)->alias = g_steal_pointer(&*alias);
+ (*secinfo)->alias = g_steal_pointer(alias);
return 0;
}
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 1141efef4b..370d223198 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -12221,7 +12221,7 @@ qemuConnectStealCPUModelFromInfo(virCPUDef *dst,
virCPUDefFreeModel(dst);
- info = g_steal_pointer(&*src);
+ info = g_steal_pointer(src);
dst->model = g_steal_pointer(&info->name);
for (i = 0; i < info->nprops; i++) {
diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
index bffab7c13d..ba05a5a07f 100644
--- a/src/qemu/qemu_migration_cookie.c
+++ b/src/qemu/qemu_migration_cookie.c
@@ -423,7 +423,7 @@ qemuMigrationCookieAddPersistent(qemuMigrationCookie *mig,
if (!def || !*def)
return 0;
- mig->persistent = g_steal_pointer(&*def);
+ mig->persistent = g_steal_pointer(def);
mig->flags |= QEMU_MIGRATION_COOKIE_PERSISTENT;
mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_PERSISTENT;
return 0;
diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
index eb4dc6854d..e8e8ca2af2 100644
--- a/src/rpc/virnetclientstream.c
+++ b/src/rpc/virnetclientstream.c
@@ -286,18 +286,18 @@ int virNetClientStreamSetError(virNetClientStream *st,
st->err.code = err.code;
}
if (err.message) {
- st->err.message = g_steal_pointer(&*err.message);
+ st->err.message = g_steal_pointer(err.message);
}
st->err.domain = err.domain;
st->err.level = err.level;
if (err.str1) {
- st->err.str1 = g_steal_pointer(&*err.str1);
+ st->err.str1 = g_steal_pointer(err.str1);
}
if (err.str2) {
- st->err.str2 = g_steal_pointer(&*err.str2);
+ st->err.str2 = g_steal_pointer(err.str2);
}
if (err.str3) {
- st->err.str3 = g_steal_pointer(&*err.str3);
+ st->err.str3 = g_steal_pointer(err.str3);
}
st->err.int1 = err.int1;
st->err.int2 = err.int2;
--
2.34.1
2 years, 9 months
[PATCH] qemu: Audit VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE flag usage
by Michal Privoznik
There is plenty of places where a domain XML is parsed using
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE flag, but not all are
warranted. The flag usage is okay when parsing an XML produced by
us (e.g. when copying virDomainDef). In the rest of places
(especially when the XML might come from user) we need to
validate the XML, otherwise we may start QEMU assuming it has
certain capabilities while in fact it doesn't. For instance, in
this specific case when migrating a guest with virtio-mem to a
QEMU that has virtio-mem disabled, loading migration fails with:
qemu-kvm: ... 'virtio-mem-pci' is not a valid device model name
This bug is more visible the more we transfer validation from
qemu_command.c into qemu_validate.c.
There is a possibility that we might prevent migration because of
a bug in our validator, but that's better than starting a QEMU
with features it doesn't support.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2048435
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/qemu/qemu_driver.c | 5 ++---
src/qemu/qemu_migration.c | 9 +++------
src/qemu/qemu_saveimage.c | 3 +--
3 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 370d223198..7d12b187ba 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2681,8 +2681,7 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
if (!(def = virDomainDefParseString(xmlin, driver->xmlopt,
priv->qemuCaps,
- VIR_DOMAIN_DEF_PARSE_INACTIVE |
- VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) {
+ VIR_DOMAIN_DEF_PARSE_INACTIVE))) {
goto endjob;
}
if (!qemuDomainCheckABIStability(driver, vm, def))
@@ -7944,7 +7943,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriver *driver,
g_autoptr(virQEMUDriverConfig) cfg = NULL;
g_autoptr(virDomainDeviceDef) dev = NULL;
virDomainDeviceDef *dev_copy = NULL;
- unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
+ unsigned int parse_flags = 0;
g_autoptr(virDomainDef) vmdef = NULL;
int ret = -1;
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 2635ef1162..c83eb41693 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2469,8 +2469,7 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
if (xmlin) {
if (!(def = virDomainDefParseString(xmlin, driver->xmlopt, priv->qemuCaps,
- VIR_DOMAIN_DEF_PARSE_INACTIVE |
- VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
+ VIR_DOMAIN_DEF_PARSE_INACTIVE)))
return NULL;
if (!qemuDomainCheckABIStability(driver, vm, def))
@@ -2858,8 +2857,7 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
VIR_DEBUG("Using hook-filtered domain XML: %s", xmlout);
newdef = virDomainDefParseString(xmlout, driver->xmlopt, NULL,
- VIR_DOMAIN_DEF_PARSE_INACTIVE |
- VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE);
+ VIR_DOMAIN_DEF_PARSE_INACTIVE);
if (!newdef)
goto cleanup;
@@ -3355,8 +3353,7 @@ qemuMigrationAnyPrepareDef(virQEMUDriver *driver,
if (!(def = virDomainDefParseString(dom_xml, driver->xmlopt,
qemuCaps,
- VIR_DOMAIN_DEF_PARSE_INACTIVE |
- VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
+ VIR_DOMAIN_DEF_PARSE_INACTIVE)))
goto cleanup;
if (dname) {
diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c
index 557ee2cd21..b106e5b299 100644
--- a/src/qemu/qemu_saveimage.c
+++ b/src/qemu/qemu_saveimage.c
@@ -556,8 +556,7 @@ qemuSaveImageOpen(virQEMUDriver *driver,
/* Create a domain from this XML */
if (!(def = virDomainDefParseString(data->xml, driver->xmlopt, qemuCaps,
- VIR_DOMAIN_DEF_PARSE_INACTIVE |
- VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
+ VIR_DOMAIN_DEF_PARSE_INACTIVE)))
return -1;
*ret_def = g_steal_pointer(&def);
--
2.34.1
2 years, 9 months
The unix domain socket remains even after the VM is destroyed
by Masayoshi Mizuma
Hello,
I found an issue that libvirt isn't close an unix domain socket to connect to the qemu monitor
even after the VM is destroyed.
This issue happens since commit 695bdb3841 ("src: ensure GSource background unref happens in correct event loop")
on the system whose glib version is 2.56.
I would appreciate it if you could give any ideas to solve the issue.
The socket is allocated in qemuMonitorOpenUnix(), and used by the monitor->socket
and monitor->watch:
qemuMonitorOpen
qemuMonitorOpenUnix
if ((monfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
qemuMonitorOpenInternal
mon->socket = g_socket_new_from_fd(fd, &gerr);
qemuMonitorRegister
mon->watch = g_socket_create_source(mon->socket,
Usually, the socket is closed when the reference counter of the glib object
(mon->socket and mon->watch) gets 0:
qemuMonitorClose
qemuMonitorUnregister
vir_g_source_unref(mon->watch, mon->context);
g_source_set_callback(idle, virEventGLibSourceUnrefIdle, src, NULL);
virEventGLibSourceUnrefIdle
g_source_unref(src); <== unref monitor->watch
g_object_unref(mon->socket); <== unref monitor->socket
It seems that the callback virEventGLibSourceUnrefIdle() to unref the monitor->watch doesn't
work when qemuMonitorUnregister() is called via qemuProcessStop(), so the socket isn't closed.
I'm not sure why the callback doesn't work at that time. I suspect that the VM is closing
so the main loop of the monitor doesn't work any more.
We can close the socket to add g_socket_close() before unref the mon->socket, however,
it may remain a memory leak because of mon->watch (GSource object), so probably
it isn't a good idea to close the socket.
We can unref the mon->watch to set NULL to the second argument of vir_g_source_unref()
because the default main loop still works at that time, however, I'm not
sure it's an appropriate way to avoid the gobject issue which the commit solves...
I found this issue on the qemu monitor, and probably the qemu agent has the same issue
because the socket procedure is almost the same as the monitor.
I would appreciate it if you could give any ideas to solve this issue.
Following is to observe the callback working:
---
diff --git a/src/util/glibcompat.c b/src/util/glibcompat.c
index eb6dcc0111..b8b1770424 100644
--- a/src/util/glibcompat.c
+++ b/src/util/glibcompat.c
@@ -24,6 +24,9 @@
#include "glibcompat.h"
+#include "virlog.h"
+
+VIR_LOG_INIT("util.glibcompat");
/*
* Note that because of the GLIB_VERSION_MAX_ALLOWED constant in
* config-post.h, allowing use of functions from newer GLib via
@@ -244,6 +247,7 @@ virEventGLibSourceUnrefIdle(gpointer data)
GSource *src = data;
g_source_unref(src);
+ VIR_DEBUG("unrefed: %p", src);
return FALSE;
}
@@ -257,6 +261,7 @@ void vir_g_source_unref(GSource *src, GMainContext *ctx)
g_source_attach(idle, ctx);
g_source_unref(idle);
+ VIR_DEBUG("unref registered: %p ctx: %p", src, ctx);
}
#endif
---
Case the mon->watch (0xffff28008af0) is unreffed correctly
(via qemuMonitorUpdateWatch()):
18:54:15.403+0000: 16845: debug : qemuMonitorEmitResume:1159 : mon=0xffff683ac020
18:54:15.403+0000: 16845: debug : qemuProcessHandleResume:713 : Transitioned guest test-vm into running state, reason 'booted', event detail 0
18:54:15.404+0000: 16845: debug : vir_g_source_unref:264 : unref registered: 0xffff28008af0 ctx: 0xffff780169a0
18:54:15.404+0000: 16845: debug : qemuMonitorJSONIOProcessLine:222 : Line [{"return": {}, "id": "libvirt-10"}]
18:54:15.404+0000: 16845: info : qemuMonitorJSONIOProcessLine:242 : QEMU_MONITOR_RECV_REPLY: mon=0xffff683ac020 reply={"return": {}, "id": "libvirt-10"}
18:54:15.404+0000: 16845: debug : vir_g_source_unref:264 : unref registered: 0xffff2819a260 ctx: 0xffff780169a0
18:54:15.404+0000: 16845: debug : virEventGLibSourceUnrefIdle:250 : unrefed: 0xffff28008af0
Case the mon->watch (0xffff7802bb30) isn't unreffed
(via qemuProcessStop()):
18:54:15.642+0000: 16589: debug : qemuProcessStop:8008 : Shutting down vm=0xaaaad40edec0 name=test-vm id=3 pid=16842, reason=destroyed, asyncJob=none, flags=0x0
18:54:15.642+0000: 16589: debug : qemuDomainLogAppendMessage:6733 : Append log message (vm='test-vm' message='2022-01-25 18:54:15.642+0000: shutting down, reason=destroyed) stdioLogD=1
18:54:15.643+0000: 16589: info : qemuMonitorClose:834 : QEMU_MONITOR_CLOSE: mon=0xffff683ac020
18:54:15.643+0000: 16589: debug : vir_g_source_unref:264 : unref registered: 0xffff7802bb30 ctx: 0xffff780169a0
18:54:15.643+0000: 16845: debug : qemuMonitorJSONIOProcessEvent:209 : handle SHUTDOWN handler=0xffff4ef057c0 data=0xffff28007da0
18:54:15.643+0000: 16845: debug : qemuMonitorEmitShutdown:1132 : mon=0xffff683ac020 guest=2
18:54:15.643+0000: 16845: debug : qemuProcessHandleShutdown:572 : vm=0xaaaad40edec0
18:54:15.643+0000: 16845: debug : qemuProcessHandleShutdown:592 : Transitioned guest test-vm to shutdown state
18:54:15.643+0000: 16845: debug : qemuProcessKill:7921 : vm=0xaaaad40edec0 name=test-vm pid=16842 flags=0x2
18:54:15.643+0000: 16845: debug : qemuMonitorDispose:216 : mon=0xffff683ac020
18:54:15.643+0000: 16589: debug : qemuProcessKill:7921 : vm=0xaaaad40edec0 name=test-vm pid=16842 flags=0x5
18:54:15.643+0000: 16589: debug : qemuDomainCleanupRun:7313 : driver=0xffff281441b0, vm=test-vm
18:54:15.644+0000: 16589: debug : qemuProcessAutoDestroyRemove:8395 : vm=test-vm
18:54:15.645+0000: 16589: debug : qemuRemoveCgroup:1221 : Failed to terminate cgroup for test-vm
18:54:15.647+0000: 16589: debug : qemuDomainObjEndJob:1141 : Stopping job: destroy (async=none vm=0xaaaad40edec0 name=test-vm)
Thanks!
Masa
2 years, 9 months
[PATCH] domain_cgroup: Don't put semicolon at the end of VIR_GET_LIMIT_PARAMETER macro
by Michal Privoznik
In domain_cgroup.c there's VIR_GET_LIMIT_PARAMETER macro which
has a semicolon at the end of its declaration. Well, remove it so
that the places where macro is used have to put the semicolon
explicitly. This helps with automatic reformatting (at least in
vim).
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/hypervisor/domain_cgroup.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/hypervisor/domain_cgroup.c b/src/hypervisor/domain_cgroup.c
index 61b54f071c..aea0817a7f 100644
--- a/src/hypervisor/domain_cgroup.c
+++ b/src/hypervisor/domain_cgroup.c
@@ -211,11 +211,11 @@ virDomainCgroupSetMemoryLimitParameters(virCgroup *cgroup,
return -1; \
\
if (rc == 1) \
- set_ ## VALUE = true;
+ set_ ## VALUE = true
- VIR_GET_LIMIT_PARAMETER(VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT, swap_hard_limit)
- VIR_GET_LIMIT_PARAMETER(VIR_DOMAIN_MEMORY_HARD_LIMIT, hard_limit)
- VIR_GET_LIMIT_PARAMETER(VIR_DOMAIN_MEMORY_SOFT_LIMIT, soft_limit)
+ VIR_GET_LIMIT_PARAMETER(VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT, swap_hard_limit);
+ VIR_GET_LIMIT_PARAMETER(VIR_DOMAIN_MEMORY_HARD_LIMIT, hard_limit);
+ VIR_GET_LIMIT_PARAMETER(VIR_DOMAIN_MEMORY_SOFT_LIMIT, soft_limit);
#undef VIR_GET_LIMIT_PARAMETER
--
2.34.1
2 years, 9 months
[libvirt PATCH v3 0/3] ci: Check spelling
by Tim Wiederhake
This is a wrapper for codespell [1], a spell checker for source code.
Codespell does not compare words to a dictionary, but rather works by
checking words against a list of common typos, making it produce fewer
false positives than other solutions.
The script in this patch works around the lack of per-directory ignore
lists and some oddities regarding capitalization in ignore lists.
[1] (https://github.com/codespell-project/codespell/)
V1: https://listman.redhat.com/archives/libvir-list/2021-October/msg00015.html
V2: https://listman.redhat.com/archives/libvir-list/2022-January/msg00382.html
Changes since V2:
* Added meson integration
* Add option to ignore files untracked by git
* Pre-filter .po files to reduce run time
Regards,
Tim
Tim Wiederhake (3):
scripts: Check spelling
meson: Add spell checking
ci: Add spell checking
.codespellrc | 2 +
.gitlab-ci.yml | 13 +++-
build-aux/meson.build | 16 +++++
meson.build | 1 +
meson_options.txt | 1 +
scripts/check-spelling.py | 135 ++++++++++++++++++++++++++++++++++++++
scripts/meson.build | 1 +
7 files changed, 168 insertions(+), 1 deletion(-)
create mode 100644 .codespellrc
create mode 100755 scripts/check-spelling.py
--
2.31.1
2 years, 9 months
[libvirt PATCHv2 0/2] virsh: domsetlaunchsecstate: report error if no options are passed
by Ján Tomko
Use a different approach that is hopefully more future-proof and also
add a check to the qemu driver, as suggested by Michal.
Ján Tomko (2):
virsh: domsetlaunchsecstate: report error if no options are passed
qemu: qemuDomainSetLaunchSecurityState: check for params presence
src/qemu/qemu_driver.c | 33 +++++++++++++++++++--------------
tools/virsh-domain.c | 4 +++-
2 files changed, 22 insertions(+), 15 deletions(-)
--
2.31.1
2 years, 9 months