crypto: use consistent error reporting pattern for unsupported cipher modes

Not all paths in qcrypto_cipher_ctx_new() were correctly distinguishing
between valid user input for cipher mode (which should report a user
facing error), vs program logic errors (which should assert).

Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2024-06-10 10:37:33 +01:00
parent 586ac2c67d
commit 41162dd6ee

View File

@ -525,8 +525,10 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
case QCRYPTO_CIPHER_MODE_CTR:
drv = &qcrypto_nettle_des_driver_ctr;
break;
default:
case QCRYPTO_CIPHER_MODE_XTS:
goto bad_cipher_mode;
default:
g_assert_not_reached();
}
ctx = g_new0(QCryptoNettleDES, 1);
@ -551,8 +553,10 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
case QCRYPTO_CIPHER_MODE_CTR:
drv = &qcrypto_nettle_des3_driver_ctr;
break;
default:
case QCRYPTO_CIPHER_MODE_XTS:
goto bad_cipher_mode;
default:
g_assert_not_reached();
}
ctx = g_new0(QCryptoNettleDES3, 1);
@ -663,8 +667,10 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
case QCRYPTO_CIPHER_MODE_CTR:
drv = &qcrypto_nettle_cast128_driver_ctr;
break;
default:
case QCRYPTO_CIPHER_MODE_XTS:
goto bad_cipher_mode;
default:
g_assert_not_reached();
}
ctx = g_new0(QCryptoNettleCAST128, 1);
@ -741,8 +747,12 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,
case QCRYPTO_CIPHER_MODE_ECB:
drv = &qcrypto_nettle_sm4_driver_ecb;
break;
default:
case QCRYPTO_CIPHER_MODE_CBC:
case QCRYPTO_CIPHER_MODE_CTR:
case QCRYPTO_CIPHER_MODE_XTS:
goto bad_cipher_mode;
default:
g_assert_not_reached();
}
ctx = g_new0(QCryptoNettleSm4, 1);