Browse Source

crypto: fix error check on gcry_md_open

Gcrypt does not return negative values on error, it returns non-zero
values. This caused QEMU not to detect failure to open an unsupported
hash, resulting in a later crash trying to use a NULL context.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Daniel P. Berrangé 9 months ago
parent
commit
bbd40a0e31
1 changed files with 2 additions and 2 deletions
  1. 2 2
      crypto/hash-gcrypt.c

+ 2 - 2
crypto/hash-gcrypt.c

@@ -52,7 +52,7 @@ static
 QCryptoHash *qcrypto_gcrypt_hash_new(QCryptoHashAlgo alg, Error **errp)
 QCryptoHash *qcrypto_gcrypt_hash_new(QCryptoHashAlgo alg, Error **errp)
 {
 {
     QCryptoHash *hash;
     QCryptoHash *hash;
-    int ret;
+    gcry_error_t ret;
 
 
     hash = g_new(QCryptoHash, 1);
     hash = g_new(QCryptoHash, 1);
     hash->alg = alg;
     hash->alg = alg;
@@ -60,7 +60,7 @@ QCryptoHash *qcrypto_gcrypt_hash_new(QCryptoHashAlgo alg, Error **errp)
 
 
     ret = gcry_md_open((gcry_md_hd_t *) hash->opaque,
     ret = gcry_md_open((gcry_md_hd_t *) hash->opaque,
                        qcrypto_hash_alg_map[alg], 0);
                        qcrypto_hash_alg_map[alg], 0);
-    if (ret < 0) {
+    if (ret != 0) {
         error_setg(errp,
         error_setg(errp,
                    "Unable to initialize hash algorithm: %s",
                    "Unable to initialize hash algorithm: %s",
                    gcry_strerror(ret));
                    gcry_strerror(ret));