[libvirt] [PATCH] qemuxml2argvtest: Don't leak TPM unix path

When testing a domain XML with TPM we overwrite UNIX socket path to mimic what qemuTPMEmulatorPrepareHost() is doing (because *PrepareHost() functions are not called from the test). But we are not doing it fully - we need to set the chardev's type too so that virDomainTPMDefFree() can free the path. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- tests/qemuxml2argvtest.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index f630185de1..daa8d4ceeb 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -551,9 +551,11 @@ testCompareXMLToArgv(const void *data) if (vm->def->tpm) { switch (vm->def->tpm->type) { case VIR_DOMAIN_TPM_TYPE_EMULATOR: + VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path); if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path, "/dev/test") < 0) goto cleanup; + vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_UNIX; break; case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH: case VIR_DOMAIN_TPM_TYPE_LAST: -- 2.16.4

On Wed, 2018-06-13 at 15:58 +0200, Michal Privoznik wrote:
When testing a domain XML with TPM we overwrite UNIX socket path to mimic what qemuTPMEmulatorPrepareHost() is doing (because *PrepareHost() functions are not called from the test). But we are not doing it fully - we need to set the chardev's type too so that virDomainTPMDefFree() can free the path.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- tests/qemuxml2argvtest.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index f630185de1..daa8d4ceeb 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -551,9 +551,11 @@ testCompareXMLToArgv(const void *data) if (vm->def->tpm) { switch (vm->def->tpm->type) { case VIR_DOMAIN_TPM_TYPE_EMULATOR: + VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path); if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path, "/dev/test") < 0) goto cleanup; + vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_UNIX;
Looking at virDomainChrSourceDefClear(), called by virDomainTPMDefFree(), when type is CHR_TYPE_UNIX data.nix.path will be VIR_FREE()d, so I think you want to set type to CHR_TYPE_FILE instead. -- Andrea Bolognani / Red Hat / Virtualization

On 06/14/2018 10:39 AM, Andrea Bolognani wrote:
On Wed, 2018-06-13 at 15:58 +0200, Michal Privoznik wrote:
When testing a domain XML with TPM we overwrite UNIX socket path to mimic what qemuTPMEmulatorPrepareHost() is doing (because *PrepareHost() functions are not called from the test). But we are not doing it fully - we need to set the chardev's type too so that virDomainTPMDefFree() can free the path.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- tests/qemuxml2argvtest.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index f630185de1..daa8d4ceeb 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -551,9 +551,11 @@ testCompareXMLToArgv(const void *data) if (vm->def->tpm) { switch (vm->def->tpm->type) { case VIR_DOMAIN_TPM_TYPE_EMULATOR: + VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path); if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path, "/dev/test") < 0) goto cleanup; + vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_UNIX;
Looking at virDomainChrSourceDefClear(), called by virDomainTPMDefFree(), when type is CHR_TYPE_UNIX data.nix.path will be VIR_FREE()d, so I think you want to set type to CHR_TYPE_FILE instead.
Ah, good point. Do you trust me enough that I can fix this before pushing or do you want to see v2? ;-) Michal

On Thu, 2018-06-14 at 11:09 +0200, Michal Privoznik wrote:
On 06/14/2018 10:39 AM, Andrea Bolognani wrote:
On Wed, 2018-06-13 at 15:58 +0200, Michal Privoznik wrote:
When testing a domain XML with TPM we overwrite UNIX socket path to mimic what qemuTPMEmulatorPrepareHost() is doing (because *PrepareHost() functions are not called from the test). But we are not doing it fully - we need to set the chardev's type too so that virDomainTPMDefFree() can free the path.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- tests/qemuxml2argvtest.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index f630185de1..daa8d4ceeb 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -551,9 +551,11 @@ testCompareXMLToArgv(const void *data) if (vm->def->tpm) { switch (vm->def->tpm->type) { case VIR_DOMAIN_TPM_TYPE_EMULATOR: + VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path); if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path, "/dev/test") < 0) goto cleanup; + vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_UNIX;
Looking at virDomainChrSourceDefClear(), called by virDomainTPMDefFree(), when type is CHR_TYPE_UNIX data.nix.path will be VIR_FREE()d, so I think you want to set type to CHR_TYPE_FILE instead.
Ah, good point. Do you trust me enough that I can fix this before pushing or do you want to see v2? ;-)
No need for a v2, just fix it and push O:-) Reviewed-by: Andrea Bolognani <abologna@redhat.com> -- Andrea Bolognani / Red Hat / Virtualization
participants (2)
-
Andrea Bolognani
-
Michal Privoznik