Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1822bc90 authored by Jan Glauber's avatar Jan Glauber Committed by Herbert Xu
Browse files

crypto: s390 - extend crypto facility check



The specification which crypto facility is required for an algorithm is added
as a parameter to the availability check which is done before an algorithm is
registered. With this change it is easier to add new algorithms that require
different facilities.

Signed-off-by: default avatarJan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent ba0e14ac
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -508,11 +508,11 @@ static int __init aes_s390_init(void)
{
	int ret;

	if (crypt_s390_func_available(KM_AES_128_ENCRYPT))
	if (crypt_s390_func_available(KM_AES_128_ENCRYPT, CRYPT_S390_MSA))
		keylen_flag |= AES_KEYLEN_128;
	if (crypt_s390_func_available(KM_AES_192_ENCRYPT))
	if (crypt_s390_func_available(KM_AES_192_ENCRYPT, CRYPT_S390_MSA))
		keylen_flag |= AES_KEYLEN_192;
	if (crypt_s390_func_available(KM_AES_256_ENCRYPT))
	if (crypt_s390_func_available(KM_AES_256_ENCRYPT, CRYPT_S390_MSA))
		keylen_flag |= AES_KEYLEN_256;

	if (!keylen_flag)
+11 −3
Original line number Diff line number Diff line
@@ -24,6 +24,10 @@
#define CRYPT_S390_PRIORITY 300
#define CRYPT_S390_COMPOSITE_PRIORITY 400

#define CRYPT_S390_MSA	0x1
#define CRYPT_S390_MSA3	0x2
#define CRYPT_S390_MSA4	0x4

/* s390 cryptographic operations */
enum crypt_s390_operations {
	CRYPT_S390_KM   = 0x0100,
@@ -291,13 +295,17 @@ static inline int crypt_s390_kmac(long func, void *param,
 *
 * Returns 1 if func available; 0 if func or op in general not available
 */
static inline int crypt_s390_func_available(int func)
static inline int crypt_s390_func_available(int func,
					    unsigned int facility_mask)
{
	unsigned char status[16];
	int ret;

	/* check if CPACF facility (bit 17) is available */
	if (!test_facility(17))
	if (facility_mask & CRYPT_S390_MSA && !test_facility(17))
		return 0;
	if (facility_mask & CRYPT_S390_MSA3 && !test_facility(76))
		return 0;
	if (facility_mask & CRYPT_S390_MSA4 && !test_facility(77))
		return 0;

	switch (func & CRYPT_S390_OP_MASK) {
+2 −2
Original line number Diff line number Diff line
@@ -381,8 +381,8 @@ static int des_s390_init(void)
{
	int ret;

	if (!crypt_s390_func_available(KM_DEA_ENCRYPT) ||
	    !crypt_s390_func_available(KM_TDEA_192_ENCRYPT))
	if (!crypt_s390_func_available(KM_DEA_ENCRYPT, CRYPT_S390_MSA) ||
	    !crypt_s390_func_available(KM_TDEA_192_ENCRYPT, CRYPT_S390_MSA))
		return -EOPNOTSUPP;

	ret = crypto_register_alg(&des_alg);
+1 −1
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ static int __init prng_init(void)
	int ret;

	/* check if the CPU has a PRNG */
	if (!crypt_s390_func_available(KMC_PRNG))
	if (!crypt_s390_func_available(KMC_PRNG, CRYPT_S390_MSA))
		return -EOPNOTSUPP;

	if (prng_chunk_size < 8)
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ static struct shash_alg alg = {

static int __init sha1_s390_init(void)
{
	if (!crypt_s390_func_available(KIMD_SHA_1))
	if (!crypt_s390_func_available(KIMD_SHA_1, CRYPT_S390_MSA))
		return -EOPNOTSUPP;
	return crypto_register_shash(&alg);
}
Loading