diff options
Diffstat (limited to 'net/xfrm/xfrm_algo.c')
| -rw-r--r-- | net/xfrm/xfrm_algo.c | 27 | 
1 files changed, 18 insertions, 9 deletions
diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c index 87918f281bb..5a0dbeb6bbe 100644 --- a/net/xfrm/xfrm_algo.c +++ b/net/xfrm/xfrm_algo.c @@ -363,8 +363,8 @@ struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id)  EXPORT_SYMBOL_GPL(xfrm_calg_get_byid);  static struct xfrm_algo_desc *xfrm_get_byname(struct xfrm_algo_desc *list, -					      int entries, char *name, -					      int probe) +					      int entries, u32 type, u32 mask, +					      char *name, int probe)  {  	int i, status; @@ -382,7 +382,7 @@ static struct xfrm_algo_desc *xfrm_get_byname(struct xfrm_algo_desc *list,  		if (!probe)  			break; -		status = crypto_alg_available(name, 0); +		status = crypto_has_alg(name, type, mask | CRYPTO_ALG_ASYNC);  		if (!status)  			break; @@ -394,19 +394,25 @@ static struct xfrm_algo_desc *xfrm_get_byname(struct xfrm_algo_desc *list,  struct xfrm_algo_desc *xfrm_aalg_get_byname(char *name, int probe)  { -	return xfrm_get_byname(aalg_list, aalg_entries(), name, probe); +	return xfrm_get_byname(aalg_list, aalg_entries(), +			       CRYPTO_ALG_TYPE_HASH, CRYPTO_ALG_TYPE_HASH_MASK, +			       name, probe);  }  EXPORT_SYMBOL_GPL(xfrm_aalg_get_byname);  struct xfrm_algo_desc *xfrm_ealg_get_byname(char *name, int probe)  { -	return xfrm_get_byname(ealg_list, ealg_entries(), name, probe); +	return xfrm_get_byname(ealg_list, ealg_entries(), +			       CRYPTO_ALG_TYPE_BLKCIPHER, CRYPTO_ALG_TYPE_MASK, +			       name, probe);  }  EXPORT_SYMBOL_GPL(xfrm_ealg_get_byname);  struct xfrm_algo_desc *xfrm_calg_get_byname(char *name, int probe)  { -	return xfrm_get_byname(calg_list, calg_entries(), name, probe); +	return xfrm_get_byname(calg_list, calg_entries(), +			       CRYPTO_ALG_TYPE_COMPRESS, CRYPTO_ALG_TYPE_MASK, +			       name, probe);  }  EXPORT_SYMBOL_GPL(xfrm_calg_get_byname); @@ -441,19 +447,22 @@ void xfrm_probe_algs(void)  	BUG_ON(in_softirq());  	for (i = 0; i < aalg_entries(); i++) { -		status = crypto_alg_available(aalg_list[i].name, 0); +		status = crypto_has_hash(aalg_list[i].name, 0, +					 CRYPTO_ALG_ASYNC);  		if (aalg_list[i].available != status)  			aalg_list[i].available = status;  	}  	for (i = 0; i < ealg_entries(); i++) { -		status = crypto_alg_available(ealg_list[i].name, 0); +		status = crypto_has_blkcipher(ealg_list[i].name, 0, +					      CRYPTO_ALG_ASYNC);  		if (ealg_list[i].available != status)  			ealg_list[i].available = status;  	}  	for (i = 0; i < calg_entries(); i++) { -		status = crypto_alg_available(calg_list[i].name, 0); +		status = crypto_has_comp(calg_list[i].name, 0, +					 CRYPTO_ALG_ASYNC);  		if (calg_list[i].available != status)  			calg_list[i].available = status;  	}  |