From c229708848cc77b0277e7260f7e739d441c1d086 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 6 Apr 2016 12:12:06 +0100 Subject: [PATCH] block: initialize qcrypto API at startup Any programs which call the qcrypto APIs should ensure that qcrypto_init() has been called before anything else which can use crypto. Essentially this means right at the start of the main method before initializing anything else. This is important because some versions of gnutls/gcrypt require explicit initialization before use. Signed-off-by: Daniel P. Berrange Reviewed-by: Alex Bligh Tested-by: Alex Bligh Signed-off-by: Kevin Wolf --- qemu-img.c | 6 ++++++ qemu-io.c | 6 ++++++ qemu-nbd.c | 7 +++++++ 3 files changed, 19 insertions(+) diff --git a/qemu-img.c b/qemu-img.c index 17c5cfd..1697762 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -37,6 +37,7 @@ #include "block/block_int.h" #include "block/blockjob.h" #include "block/qapi.h" +#include "crypto/init.h" #include #define QEMU_IMG_VERSION "qemu-img version " QEMU_VERSION QEMU_PKGVERSION \ @@ -3486,6 +3487,11 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } + if (qcrypto_init(&local_error) < 0) { + error_reportf_err(local_error, "cannot initialize crypto: "); + exit(1); + } + module_call_init(MODULE_INIT_QOM); bdrv_init(); if (argc < 2) { diff --git a/qemu-io.c b/qemu-io.c index 0a738f1..288bba8 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -23,6 +23,7 @@ #include "sysemu/block-backend.h" #include "block/block_int.h" #include "trace/control.h" +#include "crypto/init.h" #define CMD_NOFILE_OK 0x01 @@ -443,6 +444,11 @@ int main(int argc, char **argv) progname = basename(argv[0]); qemu_init_exec_dir(argv[0]); + if (qcrypto_init(&local_error) < 0) { + error_reportf_err(local_error, "cannot initialize crypto: "); + exit(1); + } + module_call_init(MODULE_INIT_QOM); qemu_add_opts(&qemu_object_opts); bdrv_init(); diff --git a/qemu-nbd.c b/qemu-nbd.c index c2e4d3f..b5751f8 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -31,6 +31,7 @@ #include "qapi/qmp/qstring.h" #include "qom/object_interfaces.h" #include "io/channel-socket.h" +#include "crypto/init.h" #include #include @@ -519,6 +520,12 @@ int main(int argc, char **argv) memset(&sa_sigterm, 0, sizeof(sa_sigterm)); sa_sigterm.sa_handler = termsig_handler; sigaction(SIGTERM, &sa_sigterm, NULL); + + if (qcrypto_init(&local_err) < 0) { + error_reportf_err(local_err, "cannot initialize crypto: "); + exit(1); + } + module_call_init(MODULE_INIT_QOM); qemu_add_opts(&qemu_object_opts); qemu_init_exec_dir(argv[0]); -- 2.7.4