diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-09-18 12:11:14 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-09-18 12:11:14 -0700 | 
| commit | 8b53c76533aa4356602aea98f98a2f3b4051464c (patch) | |
| tree | ab10ba58e21501407f8108a6bb9003daa2176962 /crypto/crypto_user_base.c | |
| parent | 6cfae0c26b21dce323fe8799b66cf4bc996e3565 (diff) | |
| parent | 9575d1a5c0780ea26ff8dd29c94a32be32ce3c85 (diff) | |
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto updates from Herbert Xu:
 "API:
   - Add the ability to abort a skcipher walk.
  Algorithms:
   - Fix XTS to actually do the stealing.
   - Add library helpers for AES and DES for single-block users.
   - Add library helpers for SHA256.
   - Add new DES key verification helper.
   - Add surrounding bits for ESSIV generator.
   - Add accelerations for aegis128.
   - Add test vectors for lzo-rle.
  Drivers:
   - Add i.MX8MQ support to caam.
   - Add gcm/ccm/cfb/ofb aes support in inside-secure.
   - Add ofb/cfb aes support in media-tek.
   - Add HiSilicon ZIP accelerator support.
  Others:
   - Fix potential race condition in padata.
   - Use unbound workqueues in padata"
* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (311 commits)
  crypto: caam - Cast to long first before pointer conversion
  crypto: ccree - enable CTS support in AES-XTS
  crypto: inside-secure - Probe transform record cache RAM sizes
  crypto: inside-secure - Base RD fetchcount on actual RD FIFO size
  crypto: inside-secure - Base CD fetchcount on actual CD FIFO size
  crypto: inside-secure - Enable extended algorithms on newer HW
  crypto: inside-secure: Corrected configuration of EIP96_TOKEN_CTRL
  crypto: inside-secure - Add EIP97/EIP197 and endianness detection
  padata: remove cpu_index from the parallel_queue
  padata: unbind parallel jobs from specific CPUs
  padata: use separate workqueues for parallel and serial work
  padata, pcrypt: take CPU hotplug lock internally in padata_alloc_possible
  crypto: pcrypt - remove padata cpumask notifier
  padata: make padata_do_parallel find alternate callback CPU
  workqueue: require CPU hotplug read exclusion for apply_workqueue_attrs
  workqueue: unconfine alloc/apply/free_workqueue_attrs()
  padata: allocate workqueue internally
  arm64: dts: imx8mq: Add CAAM node
  random: Use wait_event_freezable() in add_hwgenerator_randomness()
  crypto: ux500 - Fix COMPILE_TEST warnings
  ...
Diffstat (limited to 'crypto/crypto_user_base.c')
| -rw-r--r-- | crypto/crypto_user_base.c | 37 | 
1 files changed, 25 insertions, 12 deletions
| diff --git a/crypto/crypto_user_base.c b/crypto/crypto_user_base.c index c65e39005ce2..910e0b46012e 100644 --- a/crypto/crypto_user_base.c +++ b/crypto/crypto_user_base.c @@ -10,9 +10,10 @@  #include <linux/crypto.h>  #include <linux/cryptouser.h>  #include <linux/sched.h> -#include <net/netlink.h>  #include <linux/security.h> +#include <net/netlink.h>  #include <net/net_namespace.h> +#include <net/sock.h>  #include <crypto/internal/skcipher.h>  #include <crypto/internal/rng.h>  #include <crypto/akcipher.h> @@ -25,9 +26,6 @@  static DEFINE_MUTEX(crypto_cfg_mutex); -/* The crypto netlink socket */ -struct sock *crypto_nlsk; -  struct crypto_dump_info {  	struct sk_buff *in_skb;  	struct sk_buff *out_skb; @@ -186,6 +184,7 @@ out:  static int crypto_report(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,  			 struct nlattr **attrs)  { +	struct net *net = sock_net(in_skb->sk);  	struct crypto_user_alg *p = nlmsg_data(in_nlh);  	struct crypto_alg *alg;  	struct sk_buff *skb; @@ -217,7 +216,7 @@ drop_alg:  	if (err)  		return err; -	return nlmsg_unicast(crypto_nlsk, skb, NETLINK_CB(in_skb).portid); +	return nlmsg_unicast(net->crypto_nlsk, skb, NETLINK_CB(in_skb).portid);  }  static int crypto_dump_report(struct sk_buff *skb, struct netlink_callback *cb) @@ -420,6 +419,7 @@ static const struct crypto_link {  static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,  			       struct netlink_ext_ack *extack)  { +	struct net *net = sock_net(skb->sk);  	struct nlattr *attrs[CRYPTOCFGA_MAX+1];  	const struct crypto_link *link;  	int type, err; @@ -450,7 +450,7 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,  				.done = link->done,  				.min_dump_alloc = min(dump_alloc, 65535UL),  			}; -			err = netlink_dump_start(crypto_nlsk, skb, nlh, &c); +			err = netlink_dump_start(net->crypto_nlsk, skb, nlh, &c);  		}  		return err; @@ -474,22 +474,35 @@ static void crypto_netlink_rcv(struct sk_buff *skb)  	mutex_unlock(&crypto_cfg_mutex);  } -static int __init crypto_user_init(void) +static int __net_init crypto_netlink_init(struct net *net)  {  	struct netlink_kernel_cfg cfg = {  		.input	= crypto_netlink_rcv,  	}; -	crypto_nlsk = netlink_kernel_create(&init_net, NETLINK_CRYPTO, &cfg); -	if (!crypto_nlsk) -		return -ENOMEM; +	net->crypto_nlsk = netlink_kernel_create(net, NETLINK_CRYPTO, &cfg); +	return net->crypto_nlsk == NULL ? -ENOMEM : 0; +} -	return 0; +static void __net_exit crypto_netlink_exit(struct net *net) +{ +	netlink_kernel_release(net->crypto_nlsk); +	net->crypto_nlsk = NULL; +} + +static struct pernet_operations crypto_netlink_net_ops = { +	.init = crypto_netlink_init, +	.exit = crypto_netlink_exit, +}; + +static int __init crypto_user_init(void) +{ +	return register_pernet_subsys(&crypto_netlink_net_ops);  }  static void __exit crypto_user_exit(void)  { -	netlink_kernel_release(crypto_nlsk); +	unregister_pernet_subsys(&crypto_netlink_net_ops);  }  module_init(crypto_user_init); | 
