On 05/11/2016 07:36 AM, Peter Krempa wrote:
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(-)
I think I addressed this in patch 2 of my series:
http://www.redhat.com/archives/libvir-list/2016-May/msg00444.html
John
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;
+}