diff options
Diffstat (limited to 'net/xfrm/xfrm_algo.c')
| -rw-r--r-- | net/xfrm/xfrm_algo.c | 68 | 
1 files changed, 60 insertions, 8 deletions
| diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c index 4ce2d93162c1..6fb9d00a75dc 100644 --- a/net/xfrm/xfrm_algo.c +++ b/net/xfrm/xfrm_algo.c @@ -35,6 +35,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AES_GCM_ICV8,  		.sadb_alg_ivlen = 8, @@ -51,6 +53,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AES_GCM_ICV12,  		.sadb_alg_ivlen = 8, @@ -67,6 +71,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AES_GCM_ICV16,  		.sadb_alg_ivlen = 8, @@ -83,6 +89,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AES_CCM_ICV8,  		.sadb_alg_ivlen = 8, @@ -99,6 +107,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AES_CCM_ICV12,  		.sadb_alg_ivlen = 8, @@ -115,6 +125,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AES_CCM_ICV16,  		.sadb_alg_ivlen = 8, @@ -131,6 +143,8 @@ static struct xfrm_algo_desc aead_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_NULL_AES_GMAC,  		.sadb_alg_ivlen = 8, @@ -151,6 +165,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_AALG_NULL,  		.sadb_alg_ivlen = 0, @@ -169,6 +185,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_AALG_MD5HMAC,  		.sadb_alg_ivlen = 0, @@ -187,6 +205,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_AALG_SHA1HMAC,  		.sadb_alg_ivlen = 0, @@ -205,6 +225,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_AALG_SHA2_256HMAC,  		.sadb_alg_ivlen = 0, @@ -222,6 +244,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_AALG_SHA2_384HMAC,  		.sadb_alg_ivlen = 0, @@ -239,6 +263,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_AALG_SHA2_512HMAC,  		.sadb_alg_ivlen = 0, @@ -257,6 +283,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_AALG_RIPEMD160HMAC,  		.sadb_alg_ivlen = 0, @@ -274,6 +302,8 @@ static struct xfrm_algo_desc aalg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_AALG_AES_XCBC_MAC,  		.sadb_alg_ivlen = 0, @@ -295,6 +325,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id =	SADB_EALG_NULL,  		.sadb_alg_ivlen = 0, @@ -313,6 +345,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_EALG_DESCBC,  		.sadb_alg_ivlen = 8, @@ -331,6 +365,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_EALG_3DESCBC,  		.sadb_alg_ivlen = 8, @@ -349,6 +385,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_CASTCBC,  		.sadb_alg_ivlen = 8, @@ -367,6 +405,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_BLOWFISHCBC,  		.sadb_alg_ivlen = 8, @@ -385,6 +425,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AESCBC,  		.sadb_alg_ivlen = 8, @@ -403,6 +445,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_SERPENTCBC,  		.sadb_alg_ivlen = 8, @@ -421,6 +465,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_CAMELLIACBC,  		.sadb_alg_ivlen = 8, @@ -439,6 +485,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_TWOFISHCBC,  		.sadb_alg_ivlen = 8, @@ -456,6 +504,8 @@ static struct xfrm_algo_desc ealg_list[] = {  		}  	}, +	.pfkey_supported = 1, +  	.desc = {  		.sadb_alg_id = SADB_X_EALG_AESCTR,  		.sadb_alg_ivlen	= 8, @@ -473,6 +523,7 @@ static struct xfrm_algo_desc calg_list[] = {  			.threshold = 90,  		}  	}, +	.pfkey_supported = 1,  	.desc = { .sadb_alg_id = SADB_X_CALG_DEFLATE }  },  { @@ -482,6 +533,7 @@ static struct xfrm_algo_desc calg_list[] = {  			.threshold = 90,  		}  	}, +	.pfkey_supported = 1,  	.desc = { .sadb_alg_id = SADB_X_CALG_LZS }  },  { @@ -491,6 +543,7 @@ static struct xfrm_algo_desc calg_list[] = {  			.threshold = 50,  		}  	}, +	.pfkey_supported = 1,  	.desc = { .sadb_alg_id = SADB_X_CALG_LZJH }  },  }; @@ -700,8 +753,7 @@ void xfrm_probe_algs(void)  	}  	for (i = 0; i < ealg_entries(); i++) { -		status = crypto_has_blkcipher(ealg_list[i].name, 0, -					      CRYPTO_ALG_ASYNC); +		status = crypto_has_ablkcipher(ealg_list[i].name, 0, 0);  		if (ealg_list[i].available != status)  			ealg_list[i].available = status;  	} @@ -715,27 +767,27 @@ void xfrm_probe_algs(void)  }  EXPORT_SYMBOL_GPL(xfrm_probe_algs); -int xfrm_count_auth_supported(void) +int xfrm_count_pfkey_auth_supported(void)  {  	int i, n;  	for (i = 0, n = 0; i < aalg_entries(); i++) -		if (aalg_list[i].available) +		if (aalg_list[i].available && aalg_list[i].pfkey_supported)  			n++;  	return n;  } -EXPORT_SYMBOL_GPL(xfrm_count_auth_supported); +EXPORT_SYMBOL_GPL(xfrm_count_pfkey_auth_supported); -int xfrm_count_enc_supported(void) +int xfrm_count_pfkey_enc_supported(void)  {  	int i, n;  	for (i = 0, n = 0; i < ealg_entries(); i++) -		if (ealg_list[i].available) +		if (ealg_list[i].available && ealg_list[i].pfkey_supported)  			n++;  	return n;  } -EXPORT_SYMBOL_GPL(xfrm_count_enc_supported); +EXPORT_SYMBOL_GPL(xfrm_count_pfkey_enc_supported);  #if defined(CONFIG_INET_ESP) || defined(CONFIG_INET_ESP_MODULE) || defined(CONFIG_INET6_ESP) || defined(CONFIG_INET6_ESP_MODULE) |