xref: /linux/crypto/af_alg.c (revision eed5fde79651c66e0e24ba3d78a92afb63a76215)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * af_alg: User-space algorithm interface
4  *
5  * This file provides the user-space API for algorithms.
6  *
7  * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
8  */
9 
10 #include <linux/atomic.h>
11 #include <linux/capability.h>
12 #include <crypto/if_alg.h>
13 #include <linux/crypto.h>
14 #include <linux/init.h>
15 #include <linux/kernel.h>
16 #include <linux/key.h>
17 #include <linux/key-type.h>
18 #include <linux/list.h>
19 #include <linux/module.h>
20 #include <linux/net.h>
21 #include <linux/rwsem.h>
22 #include <linux/sched.h>
23 #include <linux/sched/signal.h>
24 #include <linux/security.h>
25 #include <linux/string.h>
26 #include <linux/sysctl.h>
27 #include <linux/user_namespace.h>
28 #include <keys/user-type.h>
29 #include <keys/trusted-type.h>
30 #include <keys/encrypted-type.h>
31 
32 static int af_alg_restrict = 1;
33 
34 static const struct ctl_table af_alg_table[] = {
35 	{
36 		.procname       = "af_alg_restrict",
37 		.data           = &af_alg_restrict,
38 		.maxlen         = sizeof(int),
39 		.mode           = 0644,
40 		.proc_handler   = proc_dointvec_minmax,
41 		.extra1		= SYSCTL_ZERO,
42 		.extra2		= SYSCTL_TWO,
43 	},
44 };
45 
46 static struct ctl_table_header *af_alg_header;
47 
48 struct alg_type_list {
49 	const struct af_alg_type *type;
50 	struct list_head list;
51 };
52 
53 static struct proto alg_proto = {
54 	.name			= "ALG",
55 	.owner			= THIS_MODULE,
56 	.obj_size		= sizeof(struct alg_sock),
57 };
58 
59 static LIST_HEAD(alg_types);
60 static DECLARE_RWSEM(alg_types_sem);
61 
62 static const struct af_alg_type *alg_get_type(const char *name)
63 {
64 	const struct af_alg_type *type = ERR_PTR(-ENOENT);
65 	struct alg_type_list *node;
66 
67 	down_read(&alg_types_sem);
68 	list_for_each_entry(node, &alg_types, list) {
69 		if (strcmp(node->type->name, name))
70 			continue;
71 
72 		if (try_module_get(node->type->owner))
73 			type = node->type;
74 		break;
75 	}
76 	up_read(&alg_types_sem);
77 
78 	return type;
79 }
80 
81 int af_alg_register_type(const struct af_alg_type *type)
82 {
83 	struct alg_type_list *node;
84 	int err = -EEXIST;
85 
86 	down_write(&alg_types_sem);
87 	list_for_each_entry(node, &alg_types, list) {
88 		if (!strcmp(node->type->name, type->name))
89 			goto unlock;
90 	}
91 
92 	node = kmalloc_obj(*node);
93 	err = -ENOMEM;
94 	if (!node)
95 		goto unlock;
96 
97 	type->ops->owner = THIS_MODULE;
98 	if (type->ops_nokey)
99 		type->ops_nokey->owner = THIS_MODULE;
100 	node->type = type;
101 	list_add(&node->list, &alg_types);
102 	err = 0;
103 
104 unlock:
105 	up_write(&alg_types_sem);
106 
107 	return err;
108 }
109 EXPORT_SYMBOL_GPL(af_alg_register_type);
110 
111 int af_alg_unregister_type(const struct af_alg_type *type)
112 {
113 	struct alg_type_list *node;
114 	int err = -ENOENT;
115 
116 	down_write(&alg_types_sem);
117 	list_for_each_entry(node, &alg_types, list) {
118 		if (strcmp(node->type->name, type->name))
119 			continue;
120 
121 		list_del(&node->list);
122 		kfree(node);
123 		err = 0;
124 		break;
125 	}
126 	up_write(&alg_types_sem);
127 
128 	return err;
129 }
130 EXPORT_SYMBOL_GPL(af_alg_unregister_type);
131 
132 static bool af_alg_capable(void)
133 {
134 	return ns_capable_noaudit(&init_user_ns, CAP_NET_ADMIN) ||
135 	       capable(CAP_SYS_ADMIN);
136 }
137 
138 int af_alg_check_restriction(const char *name,
139 			     const struct af_alg_allowlist_entry allowlist[])
140 {
141 	int level = READ_ONCE(af_alg_restrict);
142 
143 	if (level == 0)
144 		return 0;
145 	if (level == 1) {
146 		for (const struct af_alg_allowlist_entry *ent = allowlist;
147 		     ent->name; ent++) {
148 			if (strcmp(name, ent->name) == 0 &&
149 			    (!ent->privileged || af_alg_capable()))
150 				return 0;
151 		}
152 	}
153 	/*
154 	 * Use -ENOENT (the error code for "algorithm not found") instead of
155 	 * -EACCES or -EPERM, for the highest chance of correctly triggering
156 	 * fallback code paths in userspace programs.
157 	 *
158 	 * Don't log a warning, since it would be noisy.  iwd tries to bind a
159 	 * bunch of algorithms that it never uses.
160 	 */
161 	return -ENOENT;
162 }
163 EXPORT_SYMBOL_GPL(af_alg_check_restriction);
164 
165 static void alg_do_release(const struct af_alg_type *type, void *private)
166 {
167 	if (!type)
168 		return;
169 
170 	type->release(private);
171 	module_put(type->owner);
172 }
173 
174 int af_alg_release(struct socket *sock)
175 {
176 	if (sock->sk) {
177 		sock_put(sock->sk);
178 		sock->sk = NULL;
179 	}
180 	return 0;
181 }
182 EXPORT_SYMBOL_GPL(af_alg_release);
183 
184 void af_alg_release_parent(struct sock *sk)
185 {
186 	struct alg_sock *ask = alg_sk(sk);
187 	unsigned int nokey = atomic_read(&ask->nokey_refcnt);
188 
189 	sk = ask->parent;
190 	ask = alg_sk(sk);
191 
192 	if (nokey)
193 		atomic_dec(&ask->nokey_refcnt);
194 
195 	if (atomic_dec_and_test(&ask->refcnt))
196 		sock_put(sk);
197 }
198 EXPORT_SYMBOL_GPL(af_alg_release_parent);
199 
200 static int alg_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
201 {
202 	const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY;
203 	struct sock *sk = sock->sk;
204 	struct alg_sock *ask = alg_sk(sk);
205 	struct sockaddr_alg_new *sa = (void *)uaddr;
206 	const struct af_alg_type *type;
207 	void *private;
208 	int err;
209 
210 	if (sock->state == SS_CONNECTED)
211 		return -EINVAL;
212 
213 	BUILD_BUG_ON(offsetof(struct sockaddr_alg_new, salg_name) !=
214 		     offsetof(struct sockaddr_alg, salg_name));
215 	BUILD_BUG_ON(offsetof(struct sockaddr_alg, salg_name) != sizeof(*sa));
216 
217 	if (addr_len < sizeof(*sa) + 1)
218 		return -EINVAL;
219 
220 	/* If caller uses non-allowed flag, return error. */
221 	if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed))
222 		return -EINVAL;
223 
224 	sa->salg_type[sizeof(sa->salg_type) - 1] = 0;
225 	sa->salg_name[addr_len - sizeof(*sa) - 1] = 0;
226 
227 	type = alg_get_type(sa->salg_type);
228 	if (PTR_ERR(type) == -ENOENT) {
229 		request_module("algif-%s", sa->salg_type);
230 		type = alg_get_type(sa->salg_type);
231 	}
232 
233 	if (IS_ERR(type))
234 		return PTR_ERR(type);
235 
236 	private = type->bind(sa->salg_name);
237 	if (IS_ERR(private)) {
238 		module_put(type->owner);
239 		return PTR_ERR(private);
240 	}
241 
242 	err = -EBUSY;
243 	lock_sock(sk);
244 	if (atomic_read(&ask->refcnt))
245 		goto unlock;
246 
247 	swap(ask->type, type);
248 	swap(ask->private, private);
249 
250 	err = 0;
251 
252 unlock:
253 	release_sock(sk);
254 
255 	alg_do_release(type, private);
256 
257 	return err;
258 }
259 
260 static int alg_setkey(struct sock *sk, sockptr_t ukey, unsigned int keylen)
261 {
262 	struct alg_sock *ask = alg_sk(sk);
263 	const struct af_alg_type *type = ask->type;
264 	u8 *key;
265 	int err;
266 
267 	key = sock_kmalloc(sk, keylen, GFP_KERNEL);
268 	if (!key)
269 		return -ENOMEM;
270 
271 	err = -EFAULT;
272 	if (copy_from_sockptr(key, ukey, keylen))
273 		goto out;
274 
275 	err = type->setkey(ask->private, key, keylen);
276 
277 out:
278 	sock_kzfree_s(sk, key, keylen);
279 
280 	return err;
281 }
282 
283 #ifdef CONFIG_KEYS
284 
285 static const u8 *key_data_ptr_user(const struct key *key,
286 				   unsigned int *datalen)
287 {
288 	const struct user_key_payload *ukp;
289 
290 	ukp = user_key_payload_locked(key);
291 	if (IS_ERR_OR_NULL(ukp))
292 		return ERR_PTR(-EKEYREVOKED);
293 
294 	*datalen = key->datalen;
295 
296 	return ukp->data;
297 }
298 
299 static const u8 *key_data_ptr_encrypted(const struct key *key,
300 					unsigned int *datalen)
301 {
302 	const struct encrypted_key_payload *ekp;
303 
304 	ekp = dereference_key_locked(key);
305 	if (IS_ERR_OR_NULL(ekp))
306 		return ERR_PTR(-EKEYREVOKED);
307 
308 	*datalen = ekp->decrypted_datalen;
309 
310 	return ekp->decrypted_data;
311 }
312 
313 static const u8 *key_data_ptr_trusted(const struct key *key,
314 				      unsigned int *datalen)
315 {
316 	const struct trusted_key_payload *tkp;
317 
318 	tkp = dereference_key_locked(key);
319 	if (IS_ERR_OR_NULL(tkp))
320 		return ERR_PTR(-EKEYREVOKED);
321 
322 	*datalen = tkp->key_len;
323 
324 	return tkp->key;
325 }
326 
327 static struct key *lookup_key(key_serial_t serial)
328 {
329 	key_ref_t key_ref;
330 
331 	key_ref = lookup_user_key(serial, 0, KEY_NEED_SEARCH);
332 	if (IS_ERR(key_ref))
333 		return ERR_CAST(key_ref);
334 
335 	return key_ref_to_ptr(key_ref);
336 }
337 
338 static int alg_setkey_by_key_serial(struct alg_sock *ask, sockptr_t optval,
339 				    unsigned int optlen)
340 {
341 	const struct af_alg_type *type = ask->type;
342 	u8 *key_data = NULL;
343 	unsigned int key_datalen;
344 	key_serial_t serial;
345 	struct key *key;
346 	const u8 *ret;
347 	int err;
348 
349 	if (optlen != sizeof(serial))
350 		return -EINVAL;
351 
352 	if (copy_from_sockptr(&serial, optval, optlen))
353 		return -EFAULT;
354 
355 	key = lookup_key(serial);
356 	if (IS_ERR(key))
357 		return PTR_ERR(key);
358 
359 	down_read(&key->sem);
360 
361 	ret = ERR_PTR(-ENOPROTOOPT);
362 	if (!strcmp(key->type->name, "user") ||
363 	    !strcmp(key->type->name, "logon")) {
364 		ret = key_data_ptr_user(key, &key_datalen);
365 	} else if (IS_REACHABLE(CONFIG_ENCRYPTED_KEYS) &&
366 			   !strcmp(key->type->name, "encrypted")) {
367 		ret = key_data_ptr_encrypted(key, &key_datalen);
368 	} else if (IS_REACHABLE(CONFIG_TRUSTED_KEYS) &&
369 			   !strcmp(key->type->name, "trusted")) {
370 		ret = key_data_ptr_trusted(key, &key_datalen);
371 	}
372 
373 	if (IS_ERR(ret)) {
374 		up_read(&key->sem);
375 		key_put(key);
376 		return PTR_ERR(ret);
377 	}
378 
379 	key_data = sock_kmemdup(&ask->sk, ret, key_datalen, GFP_KERNEL);
380 	if (!key_data) {
381 		up_read(&key->sem);
382 		key_put(key);
383 		return -ENOMEM;
384 	}
385 
386 	up_read(&key->sem);
387 	key_put(key);
388 
389 	err = type->setkey(ask->private, key_data, key_datalen);
390 
391 	sock_kzfree_s(&ask->sk, key_data, key_datalen);
392 
393 	return err;
394 }
395 
396 #else
397 
398 static inline int alg_setkey_by_key_serial(struct alg_sock *ask,
399 					   sockptr_t optval,
400 					   unsigned int optlen)
401 {
402 	return -ENOPROTOOPT;
403 }
404 
405 #endif
406 
407 static int alg_setsockopt(struct socket *sock, int level, int optname,
408 			  sockptr_t optval, unsigned int optlen)
409 {
410 	struct sock *sk = sock->sk;
411 	struct alg_sock *ask = alg_sk(sk);
412 	const struct af_alg_type *type;
413 	int err = -EBUSY;
414 
415 	lock_sock(sk);
416 	if (atomic_read(&ask->refcnt) != atomic_read(&ask->nokey_refcnt))
417 		goto unlock;
418 
419 	type = ask->type;
420 
421 	err = -ENOPROTOOPT;
422 	if (level != SOL_ALG || !type)
423 		goto unlock;
424 
425 	switch (optname) {
426 	case ALG_SET_KEY:
427 	case ALG_SET_KEY_BY_KEY_SERIAL:
428 		if (sock->state == SS_CONNECTED)
429 			goto unlock;
430 		if (!type->setkey)
431 			goto unlock;
432 
433 		if (optname == ALG_SET_KEY_BY_KEY_SERIAL)
434 			err = alg_setkey_by_key_serial(ask, optval, optlen);
435 		else
436 			err = alg_setkey(sk, optval, optlen);
437 		break;
438 	case ALG_SET_AEAD_AUTHSIZE:
439 		if (sock->state == SS_CONNECTED)
440 			goto unlock;
441 		if (!type->setauthsize)
442 			goto unlock;
443 		err = type->setauthsize(ask->private, optlen);
444 		break;
445 	case ALG_SET_DRBG_ENTROPY:
446 		if (sock->state == SS_CONNECTED)
447 			goto unlock;
448 		if (!type->setentropy)
449 			goto unlock;
450 
451 		err = type->setentropy(ask->private, optval, optlen);
452 	}
453 
454 unlock:
455 	release_sock(sk);
456 
457 	return err;
458 }
459 
460 int af_alg_accept(struct sock *sk, struct socket *newsock,
461 		  struct proto_accept_arg *arg)
462 {
463 	struct alg_sock *ask = alg_sk(sk);
464 	const struct af_alg_type *type;
465 	struct sock *sk2;
466 	unsigned int nokey;
467 	int err;
468 
469 	lock_sock(sk);
470 	type = ask->type;
471 
472 	err = -EINVAL;
473 	if (!type)
474 		goto unlock;
475 
476 	sk2 = sk_alloc(sock_net(sk), PF_ALG, GFP_KERNEL, &alg_proto, arg->kern);
477 	err = -ENOMEM;
478 	if (!sk2)
479 		goto unlock;
480 
481 	sock_init_data(newsock, sk2);
482 	security_sock_graft(sk2, newsock);
483 	security_sk_clone(sk, sk2);
484 
485 	/*
486 	 * newsock->ops assigned here to allow type->accept call to override
487 	 * them when required.
488 	 */
489 	newsock->ops = type->ops;
490 	err = type->accept(ask->private, sk2);
491 
492 	nokey = err == -ENOKEY;
493 	if (nokey && type->accept_nokey)
494 		err = type->accept_nokey(ask->private, sk2);
495 
496 	if (err)
497 		goto unlock;
498 
499 	if (atomic_inc_return_relaxed(&ask->refcnt) == 1)
500 		sock_hold(sk);
501 	if (nokey) {
502 		atomic_inc(&ask->nokey_refcnt);
503 		atomic_set(&alg_sk(sk2)->nokey_refcnt, 1);
504 	}
505 	alg_sk(sk2)->parent = sk;
506 	alg_sk(sk2)->type = type;
507 
508 	newsock->state = SS_CONNECTED;
509 
510 	if (nokey)
511 		newsock->ops = type->ops_nokey;
512 
513 	err = 0;
514 
515 unlock:
516 	release_sock(sk);
517 
518 	return err;
519 }
520 EXPORT_SYMBOL_GPL(af_alg_accept);
521 
522 static int alg_accept(struct socket *sock, struct socket *newsock,
523 		      struct proto_accept_arg *arg)
524 {
525 	return af_alg_accept(sock->sk, newsock, arg);
526 }
527 
528 static const struct proto_ops alg_proto_ops = {
529 	.family		=	PF_ALG,
530 	.owner		=	THIS_MODULE,
531 
532 	.connect	=	sock_no_connect,
533 	.socketpair	=	sock_no_socketpair,
534 	.getname	=	sock_no_getname,
535 	.ioctl		=	sock_no_ioctl,
536 	.listen		=	sock_no_listen,
537 	.shutdown	=	sock_no_shutdown,
538 	.mmap		=	sock_no_mmap,
539 	.sendmsg	=	sock_no_sendmsg,
540 	.recvmsg	=	sock_no_recvmsg,
541 
542 	.bind		=	alg_bind,
543 	.release	=	af_alg_release,
544 	.setsockopt	=	alg_setsockopt,
545 	.accept		=	alg_accept,
546 };
547 
548 static void alg_sock_destruct(struct sock *sk)
549 {
550 	struct alg_sock *ask = alg_sk(sk);
551 
552 	alg_do_release(ask->type, ask->private);
553 }
554 
555 static int alg_create(struct net *net, struct socket *sock, int protocol,
556 		      int kern)
557 {
558 	struct sock *sk;
559 	int err;
560 
561 	if (READ_ONCE(af_alg_restrict) == 2)
562 		return -EAFNOSUPPORT;
563 
564 	if (sock->type != SOCK_SEQPACKET)
565 		return -ESOCKTNOSUPPORT;
566 	if (protocol != 0)
567 		return -EPROTONOSUPPORT;
568 
569 	err = -ENOMEM;
570 	sk = sk_alloc(net, PF_ALG, GFP_KERNEL, &alg_proto, kern);
571 	if (!sk)
572 		goto out;
573 
574 	sock->ops = &alg_proto_ops;
575 	sock_init_data(sock, sk);
576 
577 	sk->sk_destruct = alg_sock_destruct;
578 
579 	return 0;
580 out:
581 	return err;
582 }
583 
584 static const struct net_proto_family alg_family = {
585 	.family	=	PF_ALG,
586 	.create	=	alg_create,
587 	.owner	=	THIS_MODULE,
588 };
589 
590 static void af_alg_link_sg(struct af_alg_sgl *sgl_prev,
591 			   struct af_alg_sgl *sgl_new)
592 {
593 	sg_unmark_end(sgl_prev->sgt.sgl + sgl_prev->sgt.nents - 1);
594 	sg_chain(sgl_prev->sgt.sgl, sgl_prev->sgt.nents + 1, sgl_new->sgt.sgl);
595 }
596 
597 void af_alg_free_sg(struct af_alg_sgl *sgl)
598 {
599 	int i;
600 
601 	if (sgl->sgt.sgl) {
602 		if (sgl->need_unpin)
603 			for (i = 0; i < sgl->sgt.nents; i++)
604 				unpin_user_page(sg_page(&sgl->sgt.sgl[i]));
605 		if (sgl->sgt.sgl != sgl->sgl)
606 			kvfree(sgl->sgt.sgl);
607 		sgl->sgt.sgl = NULL;
608 	}
609 }
610 EXPORT_SYMBOL_GPL(af_alg_free_sg);
611 
612 static int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
613 {
614 	struct cmsghdr *cmsg;
615 
616 	for_each_cmsghdr(cmsg, msg) {
617 		if (!CMSG_OK(msg, cmsg))
618 			return -EINVAL;
619 		if (cmsg->cmsg_level != SOL_ALG)
620 			continue;
621 
622 		switch (cmsg->cmsg_type) {
623 		case ALG_SET_IV:
624 			if (cmsg->cmsg_len < CMSG_LEN(sizeof(*con->iv)))
625 				return -EINVAL;
626 			con->iv = (void *)CMSG_DATA(cmsg);
627 			if (cmsg->cmsg_len < CMSG_LEN(con->iv->ivlen +
628 						      sizeof(*con->iv)))
629 				return -EINVAL;
630 			break;
631 
632 		case ALG_SET_OP:
633 			if (cmsg->cmsg_len < CMSG_LEN(sizeof(u32)))
634 				return -EINVAL;
635 			con->op = *(u32 *)CMSG_DATA(cmsg);
636 			break;
637 
638 		case ALG_SET_AEAD_ASSOCLEN:
639 			if (cmsg->cmsg_len < CMSG_LEN(sizeof(u32)))
640 				return -EINVAL;
641 			con->aead_assoclen = *(u32 *)CMSG_DATA(cmsg);
642 			if (con->aead_assoclen >= 0x80000000u)
643 				return -EINVAL;
644 			break;
645 
646 		default:
647 			return -EINVAL;
648 		}
649 	}
650 
651 	return 0;
652 }
653 
654 /**
655  * af_alg_alloc_tsgl - allocate the TX SGL
656  *
657  * @sk: socket of connection to user space
658  * Return: 0 upon success, < 0 upon error
659  */
660 static int af_alg_alloc_tsgl(struct sock *sk)
661 {
662 	struct alg_sock *ask = alg_sk(sk);
663 	struct af_alg_ctx *ctx = ask->private;
664 	struct af_alg_tsgl *sgl;
665 	struct scatterlist *sg = NULL;
666 
667 	sgl = list_entry(ctx->tsgl_list.prev, struct af_alg_tsgl, list);
668 	if (!list_empty(&ctx->tsgl_list))
669 		sg = sgl->sg;
670 
671 	if (!sg || sgl->cur >= MAX_SGL_ENTS) {
672 		sgl = sock_kmalloc(sk,
673 				   struct_size(sgl, sg, (MAX_SGL_ENTS + 1)),
674 				   GFP_KERNEL);
675 		if (!sgl)
676 			return -ENOMEM;
677 
678 		sg_init_table(sgl->sg, MAX_SGL_ENTS + 1);
679 		sgl->cur = 0;
680 
681 		if (sg) {
682 			sg_unmark_end(sg + MAX_SGL_ENTS - 1);
683 			sg_chain(sg, MAX_SGL_ENTS + 1, sgl->sg);
684 		}
685 
686 		list_add_tail(&sgl->list, &ctx->tsgl_list);
687 	}
688 
689 	return 0;
690 }
691 
692 /**
693  * af_alg_count_tsgl - Count number of TX SG entries
694  *
695  * The counting starts from the beginning of the SGL to @bytes.
696  *
697  * @sk: socket of connection to user space
698  * @bytes: Count the number of SG entries holding given number of bytes.
699  * Return: Number of TX SG entries found given the constraints
700  */
701 unsigned int af_alg_count_tsgl(struct sock *sk, size_t bytes)
702 {
703 	const struct alg_sock *ask = alg_sk(sk);
704 	const struct af_alg_ctx *ctx = ask->private;
705 	const struct af_alg_tsgl *sgl;
706 	unsigned int i;
707 	unsigned int sgl_count = 0;
708 
709 	if (!bytes)
710 		return 0;
711 
712 	list_for_each_entry(sgl, &ctx->tsgl_list, list) {
713 		const struct scatterlist *sg = sgl->sg;
714 
715 		for (i = 0; i < sgl->cur; i++) {
716 			sgl_count++;
717 			if (sg[i].length >= bytes)
718 				return sgl_count;
719 
720 			bytes -= sg[i].length;
721 		}
722 	}
723 
724 	return sgl_count;
725 }
726 EXPORT_SYMBOL_GPL(af_alg_count_tsgl);
727 
728 /**
729  * af_alg_pull_tsgl - Release the specified buffers from TX SGL
730  *
731  * If @dst is non-null, reassign the pages to @dst. The caller must release
732  * the pages.
733  *
734  * @sk: socket of connection to user space
735  * @used: Number of bytes to pull from TX SGL
736  * @dst: If non-NULL, buffer is reassigned to dst SGL instead of releasing. The
737  *	 caller must release the buffers in dst.
738  */
739 void af_alg_pull_tsgl(struct sock *sk, size_t used, struct scatterlist *dst)
740 {
741 	struct alg_sock *ask = alg_sk(sk);
742 	struct af_alg_ctx *ctx = ask->private;
743 	struct af_alg_tsgl *sgl;
744 	struct scatterlist *sg;
745 	unsigned int i, j = 0;
746 
747 	while (!list_empty(&ctx->tsgl_list)) {
748 		sgl = list_first_entry(&ctx->tsgl_list, struct af_alg_tsgl,
749 				       list);
750 		sg = sgl->sg;
751 
752 		for (i = 0; i < sgl->cur; i++) {
753 			size_t plen = min_t(size_t, used, sg[i].length);
754 			struct page *page = sg_page(sg + i);
755 
756 			if (!page)
757 				continue;
758 
759 			/*
760 			 * Assumption: caller created af_alg_count_tsgl(len)
761 			 * SG entries in dst.
762 			 */
763 			if (dst && plen) {
764 				/* reassign page to dst */
765 				get_page(page);
766 				sg_set_page(dst + j, page, plen, sg[i].offset);
767 				j++;
768 			}
769 
770 			sg[i].length -= plen;
771 			sg[i].offset += plen;
772 
773 			used -= plen;
774 			ctx->used -= plen;
775 
776 			if (sg[i].length)
777 				return;
778 
779 			put_page(page);
780 			sg_assign_page(sg + i, NULL);
781 		}
782 
783 		list_del(&sgl->list);
784 		sock_kfree_s(sk, sgl, struct_size(sgl, sg, MAX_SGL_ENTS + 1));
785 	}
786 
787 	if (!ctx->used)
788 		ctx->merge = 0;
789 	ctx->init = ctx->more;
790 }
791 EXPORT_SYMBOL_GPL(af_alg_pull_tsgl);
792 
793 /**
794  * af_alg_free_areq_sgls - Release TX and RX SGLs of the request
795  *
796  * @areq: Request holding the TX and RX SGL
797  */
798 static void af_alg_free_areq_sgls(struct af_alg_async_req *areq)
799 {
800 	struct sock *sk = areq->sk;
801 	struct alg_sock *ask = alg_sk(sk);
802 	struct af_alg_ctx *ctx = ask->private;
803 	struct af_alg_rsgl *rsgl, *tmp;
804 	struct scatterlist *tsgl;
805 	struct scatterlist *sg;
806 	unsigned int i;
807 
808 	list_for_each_entry_safe(rsgl, tmp, &areq->rsgl_list, list) {
809 		atomic_sub(rsgl->sg_num_bytes, &ctx->rcvused);
810 		af_alg_free_sg(&rsgl->sgl);
811 		list_del(&rsgl->list);
812 		if (rsgl != &areq->first_rsgl)
813 			sock_kfree_s(sk, rsgl, sizeof(*rsgl));
814 	}
815 
816 	tsgl = areq->tsgl;
817 	if (tsgl) {
818 		for_each_sg(tsgl, sg, areq->tsgl_entries, i) {
819 			if (!sg_page(sg))
820 				continue;
821 			put_page(sg_page(sg));
822 		}
823 
824 		sock_kfree_s(sk, tsgl, areq->tsgl_entries * sizeof(*tsgl));
825 	}
826 }
827 
828 /**
829  * af_alg_wait_for_wmem - wait for availability of writable memory
830  *
831  * @sk: socket of connection to user space
832  * @flags: If MSG_DONTWAIT is set, then only report if function would sleep
833  * Return: 0 when writable memory is available, < 0 upon error
834  */
835 static int af_alg_wait_for_wmem(struct sock *sk, unsigned int flags)
836 {
837 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
838 	int err = -ERESTARTSYS;
839 	long timeout;
840 
841 	if (flags & MSG_DONTWAIT)
842 		return -EAGAIN;
843 
844 	sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
845 
846 	add_wait_queue(sk_sleep(sk), &wait);
847 	for (;;) {
848 		if (signal_pending(current))
849 			break;
850 		timeout = MAX_SCHEDULE_TIMEOUT;
851 		if (sk_wait_event(sk, &timeout, af_alg_writable(sk), &wait)) {
852 			err = 0;
853 			break;
854 		}
855 	}
856 	remove_wait_queue(sk_sleep(sk), &wait);
857 
858 	return err;
859 }
860 
861 /**
862  * af_alg_wmem_wakeup - wakeup caller when writable memory is available
863  *
864  * @sk: socket of connection to user space
865  */
866 void af_alg_wmem_wakeup(struct sock *sk)
867 {
868 	struct socket_wq *wq;
869 
870 	if (!af_alg_writable(sk))
871 		return;
872 
873 	rcu_read_lock();
874 	wq = rcu_dereference(sk->sk_wq);
875 	if (skwq_has_sleeper(wq))
876 		wake_up_interruptible_sync_poll(&wq->wait, EPOLLIN |
877 							   EPOLLRDNORM |
878 							   EPOLLRDBAND);
879 	sk_wake_async_rcu(sk, SOCK_WAKE_WAITD, POLL_IN);
880 	rcu_read_unlock();
881 }
882 EXPORT_SYMBOL_GPL(af_alg_wmem_wakeup);
883 
884 /**
885  * af_alg_wait_for_data - wait for availability of TX data
886  *
887  * @sk: socket of connection to user space
888  * @flags: If MSG_DONTWAIT is set, then only report if function would sleep
889  * @min: Set to minimum request size if partial requests are allowed.
890  * Return: 0 when writable memory is available, < 0 upon error
891  */
892 int af_alg_wait_for_data(struct sock *sk, unsigned flags, unsigned min)
893 {
894 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
895 	struct alg_sock *ask = alg_sk(sk);
896 	struct af_alg_ctx *ctx = ask->private;
897 	long timeout;
898 	int err = -ERESTARTSYS;
899 
900 	if (flags & MSG_DONTWAIT)
901 		return -EAGAIN;
902 
903 	sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
904 
905 	add_wait_queue(sk_sleep(sk), &wait);
906 	for (;;) {
907 		if (signal_pending(current))
908 			break;
909 		timeout = MAX_SCHEDULE_TIMEOUT;
910 		if (sk_wait_event(sk, &timeout,
911 				  ctx->init && (!ctx->more ||
912 						(min && ctx->used >= min)),
913 				  &wait)) {
914 			err = 0;
915 			break;
916 		}
917 	}
918 	remove_wait_queue(sk_sleep(sk), &wait);
919 
920 	sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
921 
922 	return err;
923 }
924 EXPORT_SYMBOL_GPL(af_alg_wait_for_data);
925 
926 /**
927  * af_alg_data_wakeup - wakeup caller when new data can be sent to kernel
928  *
929  * @sk: socket of connection to user space
930  */
931 static void af_alg_data_wakeup(struct sock *sk)
932 {
933 	struct alg_sock *ask = alg_sk(sk);
934 	struct af_alg_ctx *ctx = ask->private;
935 	struct socket_wq *wq;
936 
937 	if (!ctx->used)
938 		return;
939 
940 	rcu_read_lock();
941 	wq = rcu_dereference(sk->sk_wq);
942 	if (skwq_has_sleeper(wq))
943 		wake_up_interruptible_sync_poll(&wq->wait, EPOLLOUT |
944 							   EPOLLRDNORM |
945 							   EPOLLRDBAND);
946 	sk_wake_async_rcu(sk, SOCK_WAKE_SPACE, POLL_OUT);
947 	rcu_read_unlock();
948 }
949 
950 /**
951  * af_alg_sendmsg - implementation of sendmsg system call handler
952  *
953  * The sendmsg system call handler obtains the user data and stores it
954  * in ctx->tsgl_list. This implies allocation of the required numbers of
955  * struct af_alg_tsgl.
956  *
957  * In addition, the ctx is filled with the information sent via CMSG.
958  *
959  * @sock: socket of connection to user space
960  * @msg: message from user space
961  * @size: size of message from user space
962  * @ivsize: the size of the IV for the cipher operation to verify that the
963  *	   user-space-provided IV has the right size
964  * Return: the number of copied data upon success, < 0 upon error
965  */
966 int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
967 		   unsigned int ivsize)
968 {
969 	struct sock *sk = sock->sk;
970 	struct alg_sock *ask = alg_sk(sk);
971 	struct af_alg_ctx *ctx = ask->private;
972 	struct af_alg_tsgl *sgl;
973 	struct af_alg_control con = {};
974 	long copied = 0;
975 	bool enc = false;
976 	bool init = false;
977 	int err = 0;
978 
979 	if (msg->msg_controllen) {
980 		err = af_alg_cmsg_send(msg, &con);
981 		if (err)
982 			return err;
983 
984 		init = true;
985 		switch (con.op) {
986 		case ALG_OP_ENCRYPT:
987 			enc = true;
988 			break;
989 		case ALG_OP_DECRYPT:
990 			enc = false;
991 			break;
992 		default:
993 			return -EINVAL;
994 		}
995 
996 		if (con.iv && con.iv->ivlen != ivsize)
997 			return -EINVAL;
998 	}
999 
1000 	lock_sock(sk);
1001 	if (ctx->write) {
1002 		release_sock(sk);
1003 		return -EBUSY;
1004 	}
1005 	ctx->write = true;
1006 
1007 	if (ctx->init && !ctx->more) {
1008 		if (ctx->used) {
1009 			err = -EINVAL;
1010 			goto unlock;
1011 		}
1012 
1013 		pr_info_once(
1014 			"%s sent an empty control message without MSG_MORE.\n",
1015 			current->comm);
1016 	}
1017 	ctx->init = true;
1018 
1019 	if (init) {
1020 		ctx->enc = enc;
1021 		if (con.iv)
1022 			memcpy(ctx->iv, con.iv->iv, ivsize);
1023 
1024 		ctx->aead_assoclen = con.aead_assoclen;
1025 	}
1026 
1027 	while (size) {
1028 		struct scatterlist *sg;
1029 		size_t len = size;
1030 		ssize_t plen;
1031 
1032 		/* use the existing memory in an allocated page */
1033 		if (ctx->merge) {
1034 			sgl = list_entry(ctx->tsgl_list.prev,
1035 					 struct af_alg_tsgl, list);
1036 			sg = sgl->sg + sgl->cur - 1;
1037 			len = min_t(size_t, len,
1038 				    PAGE_SIZE - sg->offset - sg->length);
1039 
1040 			err = memcpy_from_msg(page_address(sg_page(sg)) +
1041 					      sg->offset + sg->length,
1042 					      msg, len);
1043 			if (err)
1044 				goto unlock;
1045 
1046 			sg->length += len;
1047 			ctx->merge = (sg->offset + sg->length) &
1048 				     (PAGE_SIZE - 1);
1049 
1050 			ctx->used += len;
1051 			copied += len;
1052 			size -= len;
1053 			continue;
1054 		}
1055 
1056 		ctx->merge = 0;
1057 
1058 		if (!af_alg_writable(sk)) {
1059 			err = af_alg_wait_for_wmem(sk, msg->msg_flags);
1060 			if (err)
1061 				goto unlock;
1062 		}
1063 
1064 		/* allocate a new page */
1065 		len = min_t(unsigned long, len, af_alg_sndbuf(sk));
1066 
1067 		err = af_alg_alloc_tsgl(sk);
1068 		if (err)
1069 			goto unlock;
1070 
1071 		sgl = list_entry(ctx->tsgl_list.prev, struct af_alg_tsgl,
1072 				 list);
1073 		sg = sgl->sg;
1074 		if (sgl->cur)
1075 			sg_unmark_end(sg + sgl->cur - 1);
1076 
1077 		do {
1078 			struct page *pg;
1079 			unsigned int i = sgl->cur;
1080 
1081 			plen = min_t(size_t, len, PAGE_SIZE);
1082 
1083 			pg = alloc_page(GFP_KERNEL);
1084 			if (!pg) {
1085 				err = -ENOMEM;
1086 				goto unlock;
1087 			}
1088 
1089 			sg_assign_page(sg + i, pg);
1090 
1091 			err = memcpy_from_msg(page_address(sg_page(sg + i)),
1092 					      msg, plen);
1093 			if (err) {
1094 				__free_page(sg_page(sg + i));
1095 				sg_assign_page(sg + i, NULL);
1096 				goto unlock;
1097 			}
1098 
1099 			sg[i].length = plen;
1100 			len -= plen;
1101 			ctx->used += plen;
1102 			copied += plen;
1103 			size -= plen;
1104 			sgl->cur++;
1105 		} while (len && sgl->cur < MAX_SGL_ENTS);
1106 
1107 		ctx->merge = plen & (PAGE_SIZE - 1);
1108 
1109 		if (!size)
1110 			sg_mark_end(sg + sgl->cur - 1);
1111 	}
1112 
1113 	err = 0;
1114 
1115 	ctx->more = msg->msg_flags & MSG_MORE;
1116 
1117 unlock:
1118 	af_alg_data_wakeup(sk);
1119 	ctx->write = false;
1120 	release_sock(sk);
1121 
1122 	return copied ?: err;
1123 }
1124 EXPORT_SYMBOL_GPL(af_alg_sendmsg);
1125 
1126 /**
1127  * af_alg_free_resources - release resources required for crypto request
1128  * @areq: Request holding the TX and RX SGL
1129  */
1130 void af_alg_free_resources(struct af_alg_async_req *areq)
1131 {
1132 	struct sock *sk = areq->sk;
1133 	struct af_alg_ctx *ctx;
1134 
1135 	af_alg_free_areq_sgls(areq);
1136 	sock_kfree_s(sk, areq, areq->areqlen);
1137 
1138 	ctx = alg_sk(sk)->private;
1139 	ctx->inflight = false;
1140 }
1141 EXPORT_SYMBOL_GPL(af_alg_free_resources);
1142 
1143 /**
1144  * af_alg_poll - poll system call handler
1145  * @file: file pointer
1146  * @sock: socket to poll
1147  * @wait: poll_table
1148  */
1149 __poll_t af_alg_poll(struct file *file, struct socket *sock,
1150 			 poll_table *wait)
1151 {
1152 	struct sock *sk = sock->sk;
1153 	struct alg_sock *ask = alg_sk(sk);
1154 	struct af_alg_ctx *ctx = ask->private;
1155 	__poll_t mask;
1156 
1157 	sock_poll_wait(file, sock, wait);
1158 	mask = 0;
1159 
1160 	if (!ctx->more || ctx->used)
1161 		mask |= EPOLLIN | EPOLLRDNORM;
1162 
1163 	if (af_alg_writable(sk))
1164 		mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
1165 
1166 	return mask;
1167 }
1168 EXPORT_SYMBOL_GPL(af_alg_poll);
1169 
1170 /**
1171  * af_alg_alloc_areq - allocate struct af_alg_async_req
1172  *
1173  * @sk: socket of connection to user space
1174  * @areqlen: size of struct af_alg_async_req + crypto_*_reqsize
1175  * Return: allocated data structure or ERR_PTR upon error
1176  */
1177 struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
1178 					   unsigned int areqlen)
1179 {
1180 	struct af_alg_ctx *ctx = alg_sk(sk)->private;
1181 	struct af_alg_async_req *areq;
1182 
1183 	/* Only one request can be in flight. */
1184 	if (WARN_ON_ONCE(ctx->inflight))
1185 		return ERR_PTR(-EBUSY);
1186 
1187 	areq = sock_kmalloc(sk, areqlen, GFP_KERNEL);
1188 	if (unlikely(!areq))
1189 		return ERR_PTR(-ENOMEM);
1190 
1191 	memset(areq, 0, areqlen);
1192 
1193 	ctx->inflight = true;
1194 
1195 	areq->areqlen = areqlen;
1196 	areq->sk = sk;
1197 	areq->first_rsgl.sgl.sgt.sgl = areq->first_rsgl.sgl.sgl;
1198 	INIT_LIST_HEAD(&areq->rsgl_list);
1199 
1200 	return areq;
1201 }
1202 EXPORT_SYMBOL_GPL(af_alg_alloc_areq);
1203 
1204 /**
1205  * af_alg_get_rsgl - create the RX SGL for the output data from the crypto
1206  *		     operation
1207  *
1208  * @sk: socket of connection to user space
1209  * @msg: user space message
1210  * @flags: flags used to invoke recvmsg with
1211  * @areq: instance of the cryptographic request that will hold the RX SGL
1212  * @maxsize: maximum number of bytes to be pulled from user space
1213  * @outlen: number of bytes in the RX SGL
1214  * Return: 0 on success, < 0 upon error
1215  */
1216 int af_alg_get_rsgl(struct sock *sk, struct msghdr *msg, int flags,
1217 		    struct af_alg_async_req *areq, size_t maxsize,
1218 		    size_t *outlen)
1219 {
1220 	struct alg_sock *ask = alg_sk(sk);
1221 	struct af_alg_ctx *ctx = ask->private;
1222 	size_t len = 0;
1223 
1224 	while (maxsize > len && msg_data_left(msg)) {
1225 		struct af_alg_rsgl *rsgl;
1226 		ssize_t err;
1227 		size_t seglen;
1228 
1229 		/* limit the amount of readable buffers */
1230 		if (!af_alg_readable(sk))
1231 			break;
1232 
1233 		seglen = min_t(size_t, (maxsize - len),
1234 			       msg_data_left(msg));
1235 		/* Never pin more pages than the remaining RX accounting budget. */
1236 		seglen = min_t(size_t, seglen, af_alg_rcvbuf(sk));
1237 
1238 		if (list_empty(&areq->rsgl_list)) {
1239 			rsgl = &areq->first_rsgl;
1240 		} else {
1241 			rsgl = sock_kmalloc(sk, sizeof(*rsgl), GFP_KERNEL);
1242 			if (unlikely(!rsgl))
1243 				return -ENOMEM;
1244 		}
1245 
1246 		rsgl->sgl.need_unpin =
1247 			iov_iter_extract_will_pin(&msg->msg_iter);
1248 		rsgl->sgl.sgt.sgl = rsgl->sgl.sgl;
1249 		rsgl->sgl.sgt.nents = 0;
1250 		rsgl->sgl.sgt.orig_nents = 0;
1251 		list_add_tail(&rsgl->list, &areq->rsgl_list);
1252 
1253 		sg_init_table(rsgl->sgl.sgt.sgl, ALG_MAX_PAGES);
1254 		err = extract_iter_to_sg(&msg->msg_iter, seglen, &rsgl->sgl.sgt,
1255 					 ALG_MAX_PAGES, 0);
1256 		if (err < 0) {
1257 			rsgl->sg_num_bytes = 0;
1258 			return err;
1259 		}
1260 
1261 		sg_mark_end(rsgl->sgl.sgt.sgl + rsgl->sgl.sgt.nents - 1);
1262 
1263 		/* chain the new scatterlist with previous one */
1264 		if (areq->last_rsgl)
1265 			af_alg_link_sg(&areq->last_rsgl->sgl, &rsgl->sgl);
1266 
1267 		areq->last_rsgl = rsgl;
1268 		len += err;
1269 		atomic_add(err, &ctx->rcvused);
1270 		rsgl->sg_num_bytes = err;
1271 	}
1272 
1273 	*outlen = len;
1274 	return 0;
1275 }
1276 EXPORT_SYMBOL_GPL(af_alg_get_rsgl);
1277 
1278 static int __init af_alg_init(void)
1279 {
1280 	int err;
1281 
1282 	af_alg_header = register_sysctl("crypto", af_alg_table);
1283 
1284 	err = proto_register(&alg_proto, 0);
1285 	if (err)
1286 		goto out_unregister_sysctl;
1287 
1288 	err = sock_register(&alg_family);
1289 	if (err)
1290 		goto out_unregister_proto;
1291 
1292 	return 0;
1293 
1294 out_unregister_proto:
1295 	proto_unregister(&alg_proto);
1296 out_unregister_sysctl:
1297 	unregister_sysctl_table(af_alg_header);
1298 	return err;
1299 }
1300 
1301 static void __exit af_alg_exit(void)
1302 {
1303 	sock_unregister(PF_ALG);
1304 	proto_unregister(&alg_proto);
1305 	unregister_sysctl_table(af_alg_header);
1306 }
1307 
1308 module_init(af_alg_init);
1309 module_exit(af_alg_exit);
1310 MODULE_DESCRIPTION("Crypto userspace interface");
1311 MODULE_LICENSE("GPL");
1312 MODULE_ALIAS_NETPROTO(AF_ALG);
1313