The master key generation is using host state to get the random bytes. Currently it's not used so it doesn't break any tests, but it may become a problem in the future. Fix it by mocking qemuDomainGenerateRandomKey. This is possible after exporting it and switching to the dynamically linked qemu driver object for tests. --- This also makes the test not call any gnutls function which crashed certain gnutls versions as we did not initialize it (gnutls_global_init()). It may be also worth adding the call to virtTestMain so that tests don't run into that problem, but I'm not totaly persuaded that it's a good idea. src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_domain.h | 2 ++ tests/Makefile.am | 2 +- tests/qemuxml2argvmock.c | 21 +++++++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 3da0079..d955ed4 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -640,7 +640,7 @@ qemuDomainMasterKeyReadFile(qemuDomainObjPrivatePtr priv) * * Returns pointer memory containing key on success, NULL on failure */ -static uint8_t * +uint8_t * qemuDomainGenerateRandomKey(size_t nbytes) { uint8_t *key; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index c711188..b116949 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -669,4 +669,6 @@ int qemuDomainSecretPrepare(virConnectPtr conn, virDomainObjPtr vm) int qemuDomainDefValidateDiskLunSource(const virStorageSource *src) ATTRIBUTE_NONNULL(1); +uint8_t *qemuDomainGenerateRandomKey(size_t nbytes); + #endif /* __QEMU_DOMAIN_H__ */ diff --git a/tests/Makefile.am b/tests/Makefile.am index 75efb90..ba14b8f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -561,7 +561,7 @@ libqemutestdriver_la_LIBADD = $(qemu_LDADDS) qemuxml2argvtest_SOURCES = \ qemuxml2argvtest.c testutilsqemu.c testutilsqemu.h \ testutils.c testutils.h -qemuxml2argvtest_LDADD = $(qemu_LDADDS) $(LDADDS) $(LIBXML_LIBS) +qemuxml2argvtest_LDADD = libqemutestdriver.la $(LDADDS) $(LIBXML_LIBS) qemuxml2argvmock_la_SOURCES = \ qemuxml2argvmock.c diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c index 1616eed..1bad3ae 100644 --- a/tests/qemuxml2argvmock.c +++ b/tests/qemuxml2argvmock.c @@ -30,6 +30,10 @@ #include "virstring.h" #include "virtpm.h" #include "virutil.h" +#include "viralloc.h" + +#include "qemu/qemu_domain.h" + #include <time.h> #include <unistd.h> @@ -145,3 +149,20 @@ virCommandPassFD(virCommandPtr cmd ATTRIBUTE_UNUSED, { /* nada */ } + + +uint8_t * +qemuDomainGenerateRandomKey(size_t nbytes) +{ + size_t i; + uint8_t seq = 0; + uint8_t *key; + + if (VIR_ALLOC_N(key, nbytes) < 0) + return NULL; + + for (i = 0; i < nbytes; i++) + key[i] = seq++; + + return key; +} -- 2.8.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list