Linux Audio

Check our new training course

Loading...
v3.1
   1/* Keyring handling
   2 *
   3 * Copyright (C) 2004-2005, 2008 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/module.h>
  13#include <linux/init.h>
  14#include <linux/sched.h>
  15#include <linux/slab.h>
  16#include <linux/security.h>
  17#include <linux/seq_file.h>
  18#include <linux/err.h>
  19#include <keys/keyring-type.h>
 
 
  20#include <linux/uaccess.h>
  21#include "internal.h"
  22
  23#define rcu_dereference_locked_keyring(keyring)				\
  24	(rcu_dereference_protected(					\
  25		(keyring)->payload.subscriptions,			\
  26		rwsem_is_locked((struct rw_semaphore *)&(keyring)->sem)))
  27
  28#define KEY_LINK_FIXQUOTA 1UL
  29
  30/*
  31 * When plumbing the depths of the key tree, this sets a hard limit
  32 * set on how deep we're willing to go.
  33 */
  34#define KEYRING_SEARCH_MAX_DEPTH 6
  35
  36/*
  37 * We keep all named keyrings in a hash to speed looking them up.
  38 */
  39#define KEYRING_NAME_HASH_SIZE	(1 << 5)
  40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  41static struct list_head	keyring_name_hash[KEYRING_NAME_HASH_SIZE];
  42static DEFINE_RWLOCK(keyring_name_lock);
  43
  44static inline unsigned keyring_hash(const char *desc)
  45{
  46	unsigned bucket = 0;
  47
  48	for (; *desc; desc++)
  49		bucket += (unsigned char)*desc;
  50
  51	return bucket & (KEYRING_NAME_HASH_SIZE - 1);
  52}
  53
  54/*
  55 * The keyring key type definition.  Keyrings are simply keys of this type and
  56 * can be treated as ordinary keys in addition to having their own special
  57 * operations.
  58 */
 
 
  59static int keyring_instantiate(struct key *keyring,
  60			       const void *data, size_t datalen);
  61static int keyring_match(const struct key *keyring, const void *criterion);
  62static void keyring_revoke(struct key *keyring);
  63static void keyring_destroy(struct key *keyring);
  64static void keyring_describe(const struct key *keyring, struct seq_file *m);
  65static long keyring_read(const struct key *keyring,
  66			 char __user *buffer, size_t buflen);
  67
  68struct key_type key_type_keyring = {
  69	.name		= "keyring",
  70	.def_datalen	= sizeof(struct keyring_list),
 
 
  71	.instantiate	= keyring_instantiate,
  72	.match		= keyring_match,
  73	.revoke		= keyring_revoke,
  74	.destroy	= keyring_destroy,
  75	.describe	= keyring_describe,
  76	.read		= keyring_read,
  77};
  78EXPORT_SYMBOL(key_type_keyring);
  79
  80/*
  81 * Semaphore to serialise link/link calls to prevent two link calls in parallel
  82 * introducing a cycle.
  83 */
  84static DECLARE_RWSEM(keyring_serialise_link_sem);
  85
  86/*
  87 * Publish the name of a keyring so that it can be found by name (if it has
  88 * one).
  89 */
  90static void keyring_publish_name(struct key *keyring)
  91{
  92	int bucket;
  93
  94	if (keyring->description) {
  95		bucket = keyring_hash(keyring->description);
  96
  97		write_lock(&keyring_name_lock);
  98
  99		if (!keyring_name_hash[bucket].next)
 100			INIT_LIST_HEAD(&keyring_name_hash[bucket]);
 101
 102		list_add_tail(&keyring->type_data.link,
 103			      &keyring_name_hash[bucket]);
 104
 105		write_unlock(&keyring_name_lock);
 106	}
 107}
 108
 109/*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 110 * Initialise a keyring.
 111 *
 112 * Returns 0 on success, -EINVAL if given any data.
 113 */
 114static int keyring_instantiate(struct key *keyring,
 115			       const void *data, size_t datalen)
 116{
 117	int ret;
 
 
 
 
 118
 119	ret = -EINVAL;
 120	if (datalen == 0) {
 121		/* make the keyring available by name if it has one */
 122		keyring_publish_name(keyring);
 123		ret = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 124	}
 
 125
 126	return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 127}
 128
 129/*
 130 * Match keyrings on their name
 131 */
 132static int keyring_match(const struct key *keyring, const void *description)
 133{
 134	return keyring->description &&
 135		strcmp(keyring->description, description) == 0;
 136}
 137
 138/*
 
 
 
 
 
 
 
 
 
 
 
 139 * Clean up a keyring when it is destroyed.  Unpublish its name if it had one
 140 * and dispose of its data.
 
 
 
 
 
 141 */
 142static void keyring_destroy(struct key *keyring)
 143{
 144	struct keyring_list *klist;
 145	int loop;
 146
 147	if (keyring->description) {
 148		write_lock(&keyring_name_lock);
 149
 150		if (keyring->type_data.link.next != NULL &&
 151		    !list_empty(&keyring->type_data.link))
 152			list_del(&keyring->type_data.link);
 153
 154		write_unlock(&keyring_name_lock);
 155	}
 156
 157	klist = rcu_dereference_check(keyring->payload.subscriptions,
 158				      atomic_read(&keyring->usage) == 0);
 159	if (klist) {
 160		for (loop = klist->nkeys - 1; loop >= 0; loop--)
 161			key_put(klist->keys[loop]);
 162		kfree(klist);
 163	}
 
 
 164}
 165
 166/*
 167 * Describe a keyring for /proc.
 168 */
 169static void keyring_describe(const struct key *keyring, struct seq_file *m)
 170{
 171	struct keyring_list *klist;
 172
 173	if (keyring->description)
 174		seq_puts(m, keyring->description);
 175	else
 176		seq_puts(m, "[anon]");
 177
 178	if (key_is_instantiated(keyring)) {
 179		rcu_read_lock();
 180		klist = rcu_dereference(keyring->payload.subscriptions);
 181		if (klist)
 182			seq_printf(m, ": %u/%u", klist->nkeys, klist->maxkeys);
 183		else
 184			seq_puts(m, ": empty");
 185		rcu_read_unlock();
 186	}
 187}
 188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 189/*
 190 * Read a list of key IDs from the keyring's contents in binary form
 191 *
 192 * The keyring's semaphore is read-locked by the caller.
 
 
 193 */
 194static long keyring_read(const struct key *keyring,
 195			 char __user *buffer, size_t buflen)
 196{
 197	struct keyring_list *klist;
 198	struct key *key;
 199	size_t qty, tmp;
 200	int loop, ret;
 201
 202	ret = 0;
 203	klist = rcu_dereference_locked_keyring(keyring);
 204	if (klist) {
 205		/* calculate how much data we could return */
 206		qty = klist->nkeys * sizeof(key_serial_t);
 207
 208		if (buffer && buflen > 0) {
 209			if (buflen > qty)
 210				buflen = qty;
 211
 212			/* copy the IDs of the subscribed keys into the
 213			 * buffer */
 214			ret = -EFAULT;
 215
 216			for (loop = 0; loop < klist->nkeys; loop++) {
 217				key = klist->keys[loop];
 218
 219				tmp = sizeof(key_serial_t);
 220				if (tmp > buflen)
 221					tmp = buflen;
 222
 223				if (copy_to_user(buffer,
 224						 &key->serial,
 225						 tmp) != 0)
 226					goto error;
 227
 228				buflen -= tmp;
 229				if (buflen == 0)
 230					break;
 231				buffer += tmp;
 232			}
 233		}
 234
 235		ret = qty;
 
 
 
 
 
 
 
 
 
 
 
 
 
 236	}
 237
 238error:
 
 
 
 
 
 239	return ret;
 240}
 241
 242/*
 243 * Allocate a keyring and link into the destination keyring.
 244 */
 245struct key *keyring_alloc(const char *description, uid_t uid, gid_t gid,
 246			  const struct cred *cred, unsigned long flags,
 
 
 247			  struct key *dest)
 248{
 249	struct key *keyring;
 250	int ret;
 251
 252	keyring = key_alloc(&key_type_keyring, description,
 253			    uid, gid, cred,
 254			    (KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL,
 255			    flags);
 256
 257	if (!IS_ERR(keyring)) {
 258		ret = key_instantiate_and_link(keyring, NULL, 0, dest, NULL);
 259		if (ret < 0) {
 260			key_put(keyring);
 261			keyring = ERR_PTR(ret);
 262		}
 263	}
 264
 265	return keyring;
 266}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 267
 268/**
 269 * keyring_search_aux - Search a keyring tree for a key matching some criteria
 270 * @keyring_ref: A pointer to the keyring with possession indicator.
 271 * @cred: The credentials to use for permissions checks.
 272 * @type: The type of key to search for.
 273 * @description: Parameter for @match.
 274 * @match: Function to rule on whether or not a key is the one required.
 275 * @no_state_check: Don't check if a matching key is bad
 276 *
 277 * Search the supplied keyring tree for a key that matches the criteria given.
 278 * The root keyring and any linked keyrings must grant Search permission to the
 279 * caller to be searchable and keys can only be found if they too grant Search
 280 * to the caller. The possession flag on the root keyring pointer controls use
 281 * of the possessor bits in permissions checking of the entire tree.  In
 282 * addition, the LSM gets to forbid keyring searches and key matches.
 283 *
 284 * The search is performed as a breadth-then-depth search up to the prescribed
 285 * limit (KEYRING_SEARCH_MAX_DEPTH).
 286 *
 287 * Keys are matched to the type provided and are then filtered by the match
 288 * function, which is given the description to use in any way it sees fit.  The
 289 * match function may use any attributes of a key that it wishes to to
 290 * determine the match.  Normally the match function from the key type would be
 291 * used.
 292 *
 293 * RCU is used to prevent the keyring key lists from disappearing without the
 294 * need to take lots of locks.
 295 *
 296 * Returns a pointer to the found key and increments the key usage count if
 297 * successful; -EAGAIN if no matching keys were found, or if expired or revoked
 298 * keys were found; -ENOKEY if only negative keys were found; -ENOTDIR if the
 299 * specified keyring wasn't a keyring.
 300 *
 301 * In the case of a successful return, the possession attribute from
 302 * @keyring_ref is propagated to the returned key reference.
 303 */
 304key_ref_t keyring_search_aux(key_ref_t keyring_ref,
 305			     const struct cred *cred,
 306			     struct key_type *type,
 307			     const void *description,
 308			     key_match_func_t match,
 309			     bool no_state_check)
 310{
 311	struct {
 312		struct keyring_list *keylist;
 313		int kix;
 314	} stack[KEYRING_SEARCH_MAX_DEPTH];
 315
 316	struct keyring_list *keylist;
 317	struct timespec now;
 318	unsigned long possessed, kflags;
 319	struct key *keyring, *key;
 320	key_ref_t key_ref;
 321	long err;
 322	int sp, kix;
 
 
 
 323
 324	keyring = key_ref_to_ptr(keyring_ref);
 325	possessed = is_key_possessed(keyring_ref);
 326	key_check(keyring);
 327
 328	/* top keyring must have search permission to begin the search */
 329	err = key_task_permission(keyring_ref, cred, KEY_SEARCH);
 330	if (err < 0) {
 331		key_ref = ERR_PTR(err);
 332		goto error;
 333	}
 334
 335	key_ref = ERR_PTR(-ENOTDIR);
 336	if (keyring->type != &key_type_keyring)
 337		goto error;
 
 
 
 
 
 
 338
 339	rcu_read_lock();
 
 
 
 
 
 
 340
 341	now = current_kernel_time();
 342	err = -EAGAIN;
 343	sp = 0;
 344
 345	/* firstly we should check to see if this top-level keyring is what we
 346	 * are looking for */
 347	key_ref = ERR_PTR(-EAGAIN);
 348	kflags = keyring->flags;
 349	if (keyring->type == type && match(keyring, description)) {
 350		key = keyring;
 351		if (no_state_check)
 352			goto found;
 
 
 
 
 
 
 
 
 
 
 
 
 353
 354		/* check it isn't negative and hasn't expired or been
 355		 * revoked */
 356		if (kflags & (1 << KEY_FLAG_REVOKED))
 357			goto error_2;
 358		if (key->expiry && now.tv_sec >= key->expiry)
 359			goto error_2;
 360		key_ref = ERR_PTR(key->type_data.reject_error);
 361		if (kflags & (1 << KEY_FLAG_NEGATIVE))
 362			goto error_2;
 363		goto found;
 364	}
 365
 366	/* otherwise, the top keyring must not be revoked, expired, or
 367	 * negatively instantiated if we are to search it */
 368	key_ref = ERR_PTR(-EAGAIN);
 369	if (kflags & ((1 << KEY_FLAG_REVOKED) | (1 << KEY_FLAG_NEGATIVE)) ||
 370	    (keyring->expiry && now.tv_sec >= keyring->expiry))
 371		goto error_2;
 372
 373	/* start processing a new keyring */
 374descend:
 375	if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
 376		goto not_this_keyring;
 
 377
 378	keylist = rcu_dereference(keyring->payload.subscriptions);
 379	if (!keylist)
 380		goto not_this_keyring;
 
 
 381
 382	/* iterate through the keys in this keyring first */
 383	for (kix = 0; kix < keylist->nkeys; kix++) {
 384		key = keylist->keys[kix];
 385		kflags = key->flags;
 386
 387		/* ignore keys not of this type */
 388		if (key->type != type)
 389			continue;
 390
 391		/* skip revoked keys and expired keys */
 392		if (!no_state_check) {
 393			if (kflags & (1 << KEY_FLAG_REVOKED))
 394				continue;
 395
 396			if (key->expiry && now.tv_sec >= key->expiry)
 397				continue;
 398		}
 
 
 399
 400		/* keys that don't match */
 401		if (!match(key, description))
 402			continue;
 
 
 
 
 
 
 
 
 403
 404		/* key must have search permissions */
 405		if (key_task_permission(make_key_ref(key, possessed),
 406					cred, KEY_SEARCH) < 0)
 407			continue;
 408
 409		if (no_state_check)
 410			goto found;
 411
 412		/* we set a different error code if we pass a negative key */
 413		if (kflags & (1 << KEY_FLAG_NEGATIVE)) {
 414			err = key->type_data.reject_error;
 415			continue;
 416		}
 
 
 
 
 
 
 
 
 417
 418		goto found;
 419	}
 420
 421	/* search through the keyrings nested in this one */
 422	kix = 0;
 423ascend:
 424	for (; kix < keylist->nkeys; kix++) {
 425		key = keylist->keys[kix];
 426		if (key->type != &key_type_keyring)
 427			continue;
 428
 429		/* recursively search nested keyrings
 430		 * - only search keyrings for which we have search permission
 431		 */
 432		if (sp >= KEYRING_SEARCH_MAX_DEPTH)
 433			continue;
 434
 435		if (key_task_permission(make_key_ref(key, possessed),
 436					cred, KEY_SEARCH) < 0)
 437			continue;
 438
 439		/* stack the current position */
 440		stack[sp].keylist = keylist;
 441		stack[sp].kix = kix;
 442		sp++;
 443
 444		/* begin again with the new keyring */
 445		keyring = key;
 446		goto descend;
 447	}
 448
 449	/* the keyring we're looking at was disqualified or didn't contain a
 450	 * matching key */
 451not_this_keyring:
 452	if (sp > 0) {
 453		/* resume the processing of a keyring higher up in the tree */
 454		sp--;
 455		keylist = stack[sp].keylist;
 456		kix = stack[sp].kix + 1;
 457		goto ascend;
 458	}
 459
 460	key_ref = ERR_PTR(err);
 461	goto error_2;
 462
 463	/* we found a viable match */
 464found:
 465	atomic_inc(&key->usage);
 466	key_check(key);
 467	key_ref = make_key_ref(key, possessed);
 468error_2:
 469	rcu_read_unlock();
 470error:
 471	return key_ref;
 472}
 473
 474/**
 475 * keyring_search - Search the supplied keyring tree for a matching key
 476 * @keyring: The root of the keyring tree to be searched.
 477 * @type: The type of keyring we want to find.
 478 * @description: The name of the keyring we want to find.
 479 *
 480 * As keyring_search_aux() above, but using the current task's credentials and
 481 * type's default matching function.
 482 */
 483key_ref_t keyring_search(key_ref_t keyring,
 484			 struct key_type *type,
 485			 const char *description)
 486{
 487	if (!type->match)
 488		return ERR_PTR(-ENOKEY);
 489
 490	return keyring_search_aux(keyring, current->cred,
 491				  type, description, type->match, false);
 
 
 
 492}
 493EXPORT_SYMBOL(keyring_search);
 494
 495/*
 496 * Search the given keyring only (no recursion).
 497 *
 498 * The caller must guarantee that the keyring is a keyring and that the
 499 * permission is granted to search the keyring as no check is made here.
 500 *
 501 * RCU is used to make it unnecessary to lock the keyring key list here.
 502 *
 503 * Returns a pointer to the found key with usage count incremented if
 504 * successful and returns -ENOKEY if not found.  Revoked keys and keys not
 505 * providing the requested permission are skipped over.
 506 *
 507 * If successful, the possession indicator is propagated from the keyring ref
 508 * to the returned key reference.
 509 */
 510key_ref_t __keyring_search_one(key_ref_t keyring_ref,
 511			       const struct key_type *ktype,
 512			       const char *description,
 513			       key_perm_t perm)
 514{
 515	struct keyring_list *klist;
 516	unsigned long possessed;
 517	struct key *keyring, *key;
 518	int loop;
 519
 520	keyring = key_ref_to_ptr(keyring_ref);
 521	possessed = is_key_possessed(keyring_ref);
 522
 523	rcu_read_lock();
 
 524
 525	klist = rcu_dereference(keyring->payload.subscriptions);
 526	if (klist) {
 527		for (loop = 0; loop < klist->nkeys; loop++) {
 528			key = klist->keys[loop];
 529
 530			if (key->type == ktype &&
 531			    (!key->type->match ||
 532			     key->type->match(key, description)) &&
 533			    key_permission(make_key_ref(key, possessed),
 534					   perm) == 0 &&
 535			    !test_bit(KEY_FLAG_REVOKED, &key->flags)
 536			    )
 537				goto found;
 538		}
 539	}
 540
 541	rcu_read_unlock();
 542	return ERR_PTR(-ENOKEY);
 
 
 
 543
 544found:
 545	atomic_inc(&key->usage);
 546	rcu_read_unlock();
 547	return make_key_ref(key, possessed);
 
 
 
 
 
 
 548}
 549
 550/*
 551 * Find a keyring with the specified name.
 552 *
 553 * All named keyrings in the current user namespace are searched, provided they
 554 * grant Search permission directly to the caller (unless this check is
 555 * skipped).  Keyrings whose usage points have reached zero or who have been
 556 * revoked are skipped.
 557 *
 558 * Returns a pointer to the keyring with the keyring's refcount having being
 559 * incremented on success.  -ENOKEY is returned if a key could not be found.
 560 */
 561struct key *find_keyring_by_name(const char *name, bool skip_perm_check)
 562{
 563	struct key *keyring;
 564	int bucket;
 565
 566	if (!name)
 567		return ERR_PTR(-EINVAL);
 568
 569	bucket = keyring_hash(name);
 570
 571	read_lock(&keyring_name_lock);
 572
 573	if (keyring_name_hash[bucket].next) {
 574		/* search this hash bucket for a keyring with a matching name
 575		 * that's readable and that hasn't been revoked */
 576		list_for_each_entry(keyring,
 577				    &keyring_name_hash[bucket],
 578				    type_data.link
 579				    ) {
 580			if (keyring->user->user_ns != current_user_ns())
 581				continue;
 582
 583			if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
 584				continue;
 585
 586			if (strcmp(keyring->description, name) != 0)
 587				continue;
 588
 589			if (!skip_perm_check &&
 590			    key_permission(make_key_ref(keyring, 0),
 591					   KEY_SEARCH) < 0)
 592				continue;
 
 
 
 
 
 593
 594			/* we've got a match but we might end up racing with
 595			 * key_cleanup() if the keyring is currently 'dead'
 596			 * (ie. it has a zero usage count) */
 597			if (!atomic_inc_not_zero(&keyring->usage))
 598				continue;
 
 599			goto out;
 600		}
 601	}
 602
 603	keyring = ERR_PTR(-ENOKEY);
 604out:
 605	read_unlock(&keyring_name_lock);
 606	return keyring;
 607}
 608
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 609/*
 610 * See if a cycle will will be created by inserting acyclic tree B in acyclic
 611 * tree A at the topmost level (ie: as a direct child of A).
 612 *
 613 * Since we are adding B to A at the top level, checking for cycles should just
 614 * be a matter of seeing if node A is somewhere in tree B.
 615 */
 616static int keyring_detect_cycle(struct key *A, struct key *B)
 617{
 618	struct {
 619		struct keyring_list *keylist;
 620		int kix;
 621	} stack[KEYRING_SEARCH_MAX_DEPTH];
 622
 623	struct keyring_list *keylist;
 624	struct key *subtree, *key;
 625	int sp, kix, ret;
 
 
 626
 627	rcu_read_lock();
 628
 629	ret = -EDEADLK;
 630	if (A == B)
 631		goto cycle_detected;
 632
 633	subtree = B;
 634	sp = 0;
 635
 636	/* start processing a new keyring */
 637descend:
 638	if (test_bit(KEY_FLAG_REVOKED, &subtree->flags))
 639		goto not_this_keyring;
 640
 641	keylist = rcu_dereference(subtree->payload.subscriptions);
 642	if (!keylist)
 643		goto not_this_keyring;
 644	kix = 0;
 645
 646ascend:
 647	/* iterate through the remaining keys in this keyring */
 648	for (; kix < keylist->nkeys; kix++) {
 649		key = keylist->keys[kix];
 650
 651		if (key == A)
 652			goto cycle_detected;
 653
 654		/* recursively check nested keyrings */
 655		if (key->type == &key_type_keyring) {
 656			if (sp >= KEYRING_SEARCH_MAX_DEPTH)
 657				goto too_deep;
 658
 659			/* stack the current position */
 660			stack[sp].keylist = keylist;
 661			stack[sp].kix = kix;
 662			sp++;
 663
 664			/* begin again with the new keyring */
 665			subtree = key;
 666			goto descend;
 667		}
 668	}
 669
 670	/* the keyring we're looking at was disqualified or didn't contain a
 671	 * matching key */
 672not_this_keyring:
 673	if (sp > 0) {
 674		/* resume the checking of a keyring higher up in the tree */
 675		sp--;
 676		keylist = stack[sp].keylist;
 677		kix = stack[sp].kix + 1;
 678		goto ascend;
 679	}
 680
 681	ret = 0; /* no cycles detected */
 682
 683error:
 684	rcu_read_unlock();
 685	return ret;
 686
 687too_deep:
 688	ret = -ELOOP;
 689	goto error;
 690
 691cycle_detected:
 692	ret = -EDEADLK;
 693	goto error;
 694}
 695
 696/*
 697 * Dispose of a keyring list after the RCU grace period, freeing the unlinked
 698 * key
 699 */
 700static void keyring_unlink_rcu_disposal(struct rcu_head *rcu)
 701{
 702	struct keyring_list *klist =
 703		container_of(rcu, struct keyring_list, rcu);
 704
 705	if (klist->delkey != USHRT_MAX)
 706		key_put(klist->keys[klist->delkey]);
 707	kfree(klist);
 708}
 709
 710/*
 711 * Preallocate memory so that a key can be linked into to a keyring.
 712 */
 713int __key_link_begin(struct key *keyring, const struct key_type *type,
 714		     const char *description, unsigned long *_prealloc)
 
 715	__acquires(&keyring->sem)
 
 716{
 717	struct keyring_list *klist, *nklist;
 718	unsigned long prealloc;
 719	unsigned max;
 720	size_t size;
 721	int loop, ret;
 722
 723	kenter("%d,%s,%s,", key_serial(keyring), type->name, description);
 
 
 
 724
 725	if (keyring->type != &key_type_keyring)
 726		return -ENOTDIR;
 727
 728	down_write(&keyring->sem);
 729
 730	ret = -EKEYREVOKED;
 731	if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
 732		goto error_krsem;
 733
 734	/* serialise link/link calls to prevent parallel calls causing a cycle
 735	 * when linking two keyring in opposite orders */
 736	if (type == &key_type_keyring)
 737		down_write(&keyring_serialise_link_sem);
 738
 739	klist = rcu_dereference_locked_keyring(keyring);
 740
 741	/* see if there's a matching key we can displace */
 742	if (klist && klist->nkeys > 0) {
 743		for (loop = klist->nkeys - 1; loop >= 0; loop--) {
 744			if (klist->keys[loop]->type == type &&
 745			    strcmp(klist->keys[loop]->description,
 746				   description) == 0
 747			    ) {
 748				/* found a match - we'll replace this one with
 749				 * the new key */
 750				size = sizeof(struct key *) * klist->maxkeys;
 751				size += sizeof(*klist);
 752				BUG_ON(size > PAGE_SIZE);
 753
 754				ret = -ENOMEM;
 755				nklist = kmemdup(klist, size, GFP_KERNEL);
 756				if (!nklist)
 757					goto error_sem;
 758
 759				/* note replacement slot */
 760				klist->delkey = nklist->delkey = loop;
 761				prealloc = (unsigned long)nklist;
 762				goto done;
 763			}
 764		}
 765	}
 766
 767	/* check that we aren't going to overrun the user's quota */
 768	ret = key_payload_reserve(keyring,
 769				  keyring->datalen + KEYQUOTA_LINK_BYTES);
 770	if (ret < 0)
 771		goto error_sem;
 
 772
 773	if (klist && klist->nkeys < klist->maxkeys) {
 774		/* there's sufficient slack space to append directly */
 775		nklist = NULL;
 776		prealloc = KEY_LINK_FIXQUOTA;
 777	} else {
 778		/* grow the key list */
 779		max = 4;
 780		if (klist)
 781			max += klist->maxkeys;
 782
 783		ret = -ENFILE;
 784		if (max > USHRT_MAX - 1)
 785			goto error_quota;
 786		size = sizeof(*klist) + sizeof(struct key *) * max;
 787		if (size > PAGE_SIZE)
 788			goto error_quota;
 789
 790		ret = -ENOMEM;
 791		nklist = kmalloc(size, GFP_KERNEL);
 792		if (!nklist)
 793			goto error_quota;
 794
 795		nklist->maxkeys = max;
 796		if (klist) {
 797			memcpy(nklist->keys, klist->keys,
 798			       sizeof(struct key *) * klist->nkeys);
 799			nklist->delkey = klist->nkeys;
 800			nklist->nkeys = klist->nkeys + 1;
 801			klist->delkey = USHRT_MAX;
 802		} else {
 803			nklist->nkeys = 1;
 804			nklist->delkey = 0;
 805		}
 806
 807		/* add the key into the new space */
 808		nklist->keys[nklist->delkey] = NULL;
 809	}
 810
 811	prealloc = (unsigned long)nklist | KEY_LINK_FIXQUOTA;
 812done:
 813	*_prealloc = prealloc;
 814	kleave(" = 0");
 815	return 0;
 816
 817error_quota:
 818	/* undo the quota changes */
 819	key_payload_reserve(keyring,
 820			    keyring->datalen - KEYQUOTA_LINK_BYTES);
 821error_sem:
 822	if (type == &key_type_keyring)
 823		up_write(&keyring_serialise_link_sem);
 824error_krsem:
 825	up_write(&keyring->sem);
 826	kleave(" = %d", ret);
 827	return ret;
 828}
 829
 830/*
 831 * Check already instantiated keys aren't going to be a problem.
 832 *
 833 * The caller must have called __key_link_begin(). Don't need to call this for
 834 * keys that were created since __key_link_begin() was called.
 835 */
 836int __key_link_check_live_key(struct key *keyring, struct key *key)
 837{
 838	if (key->type == &key_type_keyring)
 839		/* check that we aren't going to create a cycle by linking one
 840		 * keyring to another */
 841		return keyring_detect_cycle(keyring, key);
 842	return 0;
 843}
 844
 845/*
 846 * Link a key into to a keyring.
 847 *
 848 * Must be called with __key_link_begin() having being called.  Discards any
 849 * already extant link to matching key if there is one, so that each keyring
 850 * holds at most one link to any given key of a particular type+description
 851 * combination.
 852 */
 853void __key_link(struct key *keyring, struct key *key,
 854		unsigned long *_prealloc)
 855{
 856	struct keyring_list *klist, *nklist;
 857
 858	nklist = (struct keyring_list *)(*_prealloc & ~KEY_LINK_FIXQUOTA);
 859	*_prealloc = 0;
 860
 861	kenter("%d,%d,%p", keyring->serial, key->serial, nklist);
 862
 863	klist = rcu_dereference_protected(keyring->payload.subscriptions,
 864					  rwsem_is_locked(&keyring->sem));
 865
 866	atomic_inc(&key->usage);
 867
 868	/* there's a matching key we can displace or an empty slot in a newly
 869	 * allocated list we can fill */
 870	if (nklist) {
 871		kdebug("replace %hu/%hu/%hu",
 872		       nklist->delkey, nklist->nkeys, nklist->maxkeys);
 873
 874		nklist->keys[nklist->delkey] = key;
 875
 876		rcu_assign_pointer(keyring->payload.subscriptions, nklist);
 877
 878		/* dispose of the old keyring list and, if there was one, the
 879		 * displaced key */
 880		if (klist) {
 881			kdebug("dispose %hu/%hu/%hu",
 882			       klist->delkey, klist->nkeys, klist->maxkeys);
 883			call_rcu(&klist->rcu, keyring_unlink_rcu_disposal);
 884		}
 885	} else {
 886		/* there's sufficient slack space to append directly */
 887		klist->keys[klist->nkeys] = key;
 888		smp_wmb();
 889		klist->nkeys++;
 890	}
 891}
 892
 893/*
 894 * Finish linking a key into to a keyring.
 895 *
 896 * Must be called with __key_link_begin() having being called.
 897 */
 898void __key_link_end(struct key *keyring, struct key_type *type,
 899		    unsigned long prealloc)
 
 900	__releases(&keyring->sem)
 
 901{
 902	BUG_ON(type == NULL);
 903	BUG_ON(type->name == NULL);
 904	kenter("%d,%s,%lx", keyring->serial, type->name, prealloc);
 905
 906	if (type == &key_type_keyring)
 907		up_write(&keyring_serialise_link_sem);
 908
 909	if (prealloc) {
 910		if (prealloc & KEY_LINK_FIXQUOTA)
 911			key_payload_reserve(keyring,
 912					    keyring->datalen -
 913					    KEYQUOTA_LINK_BYTES);
 914		kfree((struct keyring_list *)(prealloc & ~KEY_LINK_FIXQUOTA));
 915	}
 916	up_write(&keyring->sem);
 917}
 918
 
 
 
 
 
 
 
 
 
 
 
 919/**
 920 * key_link - Link a key to a keyring
 921 * @keyring: The keyring to make the link in.
 922 * @key: The key to link to.
 923 *
 924 * Make a link in a keyring to a key, such that the keyring holds a reference
 925 * on that key and the key can potentially be found by searching that keyring.
 926 *
 927 * This function will write-lock the keyring's semaphore and will consume some
 928 * of the user's key data quota to hold the link.
 929 *
 930 * Returns 0 if successful, -ENOTDIR if the keyring isn't a keyring,
 931 * -EKEYREVOKED if the keyring has been revoked, -ENFILE if the keyring is
 932 * full, -EDQUOT if there is insufficient key data quota remaining to add
 933 * another link or -ENOMEM if there's insufficient memory.
 934 *
 935 * It is assumed that the caller has checked that it is permitted for a link to
 936 * be made (the keyring should have Write permission and the key Link
 937 * permission).
 938 */
 939int key_link(struct key *keyring, struct key *key)
 940{
 941	unsigned long prealloc;
 942	int ret;
 943
 
 
 944	key_check(keyring);
 945	key_check(key);
 946
 947	ret = __key_link_begin(keyring, key->type, key->description, &prealloc);
 948	if (ret == 0) {
 949		ret = __key_link_check_live_key(keyring, key);
 
 
 
 950		if (ret == 0)
 951			__key_link(keyring, key, &prealloc);
 952		__key_link_end(keyring, key->type, prealloc);
 953	}
 954
 
 955	return ret;
 956}
 957EXPORT_SYMBOL(key_link);
 958
 959/**
 960 * key_unlink - Unlink the first link to a key from a keyring.
 961 * @keyring: The keyring to remove the link from.
 962 * @key: The key the link is to.
 963 *
 964 * Remove a link from a keyring to a key.
 965 *
 966 * This function will write-lock the keyring's semaphore.
 967 *
 968 * Returns 0 if successful, -ENOTDIR if the keyring isn't a keyring, -ENOENT if
 969 * the key isn't linked to by the keyring or -ENOMEM if there's insufficient
 970 * memory.
 971 *
 972 * It is assumed that the caller has checked that it is permitted for a link to
 973 * be removed (the keyring should have Write permission; no permissions are
 974 * required on the key).
 975 */
 976int key_unlink(struct key *keyring, struct key *key)
 977{
 978	struct keyring_list *klist, *nklist;
 979	int loop, ret;
 980
 981	key_check(keyring);
 982	key_check(key);
 983
 984	ret = -ENOTDIR;
 985	if (keyring->type != &key_type_keyring)
 986		goto error;
 987
 988	down_write(&keyring->sem);
 989
 990	klist = rcu_dereference_locked_keyring(keyring);
 991	if (klist) {
 992		/* search the keyring for the key */
 993		for (loop = 0; loop < klist->nkeys; loop++)
 994			if (klist->keys[loop] == key)
 995				goto key_is_present;
 996	}
 997
 998	up_write(&keyring->sem);
 999	ret = -ENOENT;
1000	goto error;
1001
1002key_is_present:
1003	/* we need to copy the key list for RCU purposes */
1004	nklist = kmalloc(sizeof(*klist) +
1005			 sizeof(struct key *) * klist->maxkeys,
1006			 GFP_KERNEL);
1007	if (!nklist)
1008		goto nomem;
1009	nklist->maxkeys = klist->maxkeys;
1010	nklist->nkeys = klist->nkeys - 1;
1011
1012	if (loop > 0)
1013		memcpy(&nklist->keys[0],
1014		       &klist->keys[0],
1015		       loop * sizeof(struct key *));
1016
1017	if (loop < nklist->nkeys)
1018		memcpy(&nklist->keys[loop],
1019		       &klist->keys[loop + 1],
1020		       (nklist->nkeys - loop) * sizeof(struct key *));
1021
1022	/* adjust the user's quota */
1023	key_payload_reserve(keyring,
1024			    keyring->datalen - KEYQUOTA_LINK_BYTES);
1025
1026	rcu_assign_pointer(keyring->payload.subscriptions, nklist);
1027
1028	up_write(&keyring->sem);
1029
1030	/* schedule for later cleanup */
1031	klist->delkey = loop;
1032	call_rcu(&klist->rcu, keyring_unlink_rcu_disposal);
1033
 
 
1034	ret = 0;
1035
1036error:
1037	return ret;
1038nomem:
1039	ret = -ENOMEM;
1040	up_write(&keyring->sem);
1041	goto error;
1042}
1043EXPORT_SYMBOL(key_unlink);
1044
1045/*
1046 * Dispose of a keyring list after the RCU grace period, releasing the keys it
1047 * links to.
1048 */
1049static void keyring_clear_rcu_disposal(struct rcu_head *rcu)
1050{
1051	struct keyring_list *klist;
1052	int loop;
1053
1054	klist = container_of(rcu, struct keyring_list, rcu);
1055
1056	for (loop = klist->nkeys - 1; loop >= 0; loop--)
1057		key_put(klist->keys[loop]);
1058
1059	kfree(klist);
1060}
1061
1062/**
1063 * keyring_clear - Clear a keyring
1064 * @keyring: The keyring to clear.
1065 *
1066 * Clear the contents of the specified keyring.
1067 *
1068 * Returns 0 if successful or -ENOTDIR if the keyring isn't a keyring.
1069 */
1070int keyring_clear(struct key *keyring)
1071{
1072	struct keyring_list *klist;
1073	int ret;
1074
1075	ret = -ENOTDIR;
1076	if (keyring->type == &key_type_keyring) {
1077		/* detach the pointer block with the locks held */
1078		down_write(&keyring->sem);
1079
1080		klist = rcu_dereference_locked_keyring(keyring);
1081		if (klist) {
1082			/* adjust the quota */
1083			key_payload_reserve(keyring,
1084					    sizeof(struct keyring_list));
1085
1086			rcu_assign_pointer(keyring->payload.subscriptions,
1087					   NULL);
1088		}
1089
1090		up_write(&keyring->sem);
1091
1092		/* free the keys after the locks have been dropped */
1093		if (klist)
1094			call_rcu(&klist->rcu, keyring_clear_rcu_disposal);
1095
 
 
 
 
 
 
 
1096		ret = 0;
1097	}
1098
 
1099	return ret;
1100}
1101EXPORT_SYMBOL(keyring_clear);
1102
1103/*
1104 * Dispose of the links from a revoked keyring.
1105 *
1106 * This is called with the key sem write-locked.
1107 */
1108static void keyring_revoke(struct key *keyring)
1109{
1110	struct keyring_list *klist;
1111
1112	klist = rcu_dereference_locked_keyring(keyring);
 
 
 
 
 
 
1113
1114	/* adjust the quota */
1115	key_payload_reserve(keyring, 0);
 
 
1116
1117	if (klist) {
1118		rcu_assign_pointer(keyring->payload.subscriptions, NULL);
1119		call_rcu(&klist->rcu, keyring_clear_rcu_disposal);
1120	}
1121}
1122
1123/*
1124 * Determine whether a key is dead.
1125 */
1126static bool key_is_dead(struct key *key, time_t limit)
1127{
1128	return test_bit(KEY_FLAG_DEAD, &key->flags) ||
1129		(key->expiry > 0 && key->expiry <= limit);
 
 
 
1130}
1131
1132/*
1133 * Collect garbage from the contents of a keyring, replacing the old list with
1134 * a new one with the pointers all shuffled down.
1135 *
1136 * Dead keys are classed as oned that are flagged as being dead or are revoked,
1137 * expired or negative keys that were revoked or expired before the specified
1138 * limit.
1139 */
1140void keyring_gc(struct key *keyring, time_t limit)
1141{
1142	struct keyring_list *klist, *new;
1143	struct key *key;
1144	int loop, keep, max;
1145
1146	kenter("{%x,%s}", key_serial(keyring), keyring->description);
 
 
1147
 
 
 
 
 
 
 
 
 
 
 
 
 
1148	down_write(&keyring->sem);
 
 
 
 
 
1149
1150	klist = rcu_dereference_locked_keyring(keyring);
1151	if (!klist)
1152		goto no_klist;
1153
1154	/* work out how many subscriptions we're keeping */
1155	keep = 0;
1156	for (loop = klist->nkeys - 1; loop >= 0; loop--)
1157		if (!key_is_dead(klist->keys[loop], limit))
1158			keep++;
1159
1160	if (keep == klist->nkeys)
1161		goto just_return;
1162
1163	/* allocate a new keyring payload */
1164	max = roundup(keep, 4);
1165	new = kmalloc(sizeof(struct keyring_list) + max * sizeof(struct key *),
1166		      GFP_KERNEL);
1167	if (!new)
1168		goto nomem;
1169	new->maxkeys = max;
1170	new->nkeys = 0;
1171	new->delkey = 0;
1172
1173	/* install the live keys
1174	 * - must take care as expired keys may be updated back to life
1175	 */
1176	keep = 0;
1177	for (loop = klist->nkeys - 1; loop >= 0; loop--) {
1178		key = klist->keys[loop];
1179		if (!key_is_dead(key, limit)) {
1180			if (keep >= max)
1181				goto discard_new;
1182			new->keys[keep++] = key_get(key);
1183		}
1184	}
1185	new->nkeys = keep;
1186
1187	/* adjust the quota */
1188	key_payload_reserve(keyring,
1189			    sizeof(struct keyring_list) +
1190			    KEYQUOTA_LINK_BYTES * keep);
1191
1192	if (keep == 0) {
1193		rcu_assign_pointer(keyring->payload.subscriptions, NULL);
1194		kfree(new);
1195	} else {
1196		rcu_assign_pointer(keyring->payload.subscriptions, new);
 
1197	}
1198
1199	up_write(&keyring->sem);
 
1200
1201	call_rcu(&klist->rcu, keyring_clear_rcu_disposal);
1202	kleave(" [yes]");
1203	return;
1204
1205discard_new:
1206	new->nkeys = keep;
1207	keyring_clear_rcu_disposal(&new->rcu);
1208	up_write(&keyring->sem);
1209	kleave(" [discard]");
1210	return;
1211
1212just_return:
1213	up_write(&keyring->sem);
1214	kleave(" [no dead]");
1215	return;
1216
1217no_klist:
1218	up_write(&keyring->sem);
1219	kleave(" [no_klist]");
1220	return;
1221
1222nomem:
1223	up_write(&keyring->sem);
1224	kleave(" [oom]");
1225}
v4.17
   1/* Keyring handling
   2 *
   3 * Copyright (C) 2004-2005, 2008, 2013 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/module.h>
  13#include <linux/init.h>
  14#include <linux/sched.h>
  15#include <linux/slab.h>
  16#include <linux/security.h>
  17#include <linux/seq_file.h>
  18#include <linux/err.h>
  19#include <keys/keyring-type.h>
  20#include <keys/user-type.h>
  21#include <linux/assoc_array_priv.h>
  22#include <linux/uaccess.h>
  23#include "internal.h"
  24
 
 
 
 
 
 
 
  25/*
  26 * When plumbing the depths of the key tree, this sets a hard limit
  27 * set on how deep we're willing to go.
  28 */
  29#define KEYRING_SEARCH_MAX_DEPTH 6
  30
  31/*
  32 * We keep all named keyrings in a hash to speed looking them up.
  33 */
  34#define KEYRING_NAME_HASH_SIZE	(1 << 5)
  35
  36/*
  37 * We mark pointers we pass to the associative array with bit 1 set if
  38 * they're keyrings and clear otherwise.
  39 */
  40#define KEYRING_PTR_SUBTYPE	0x2UL
  41
  42static inline bool keyring_ptr_is_keyring(const struct assoc_array_ptr *x)
  43{
  44	return (unsigned long)x & KEYRING_PTR_SUBTYPE;
  45}
  46static inline struct key *keyring_ptr_to_key(const struct assoc_array_ptr *x)
  47{
  48	void *object = assoc_array_ptr_to_leaf(x);
  49	return (struct key *)((unsigned long)object & ~KEYRING_PTR_SUBTYPE);
  50}
  51static inline void *keyring_key_to_ptr(struct key *key)
  52{
  53	if (key->type == &key_type_keyring)
  54		return (void *)((unsigned long)key | KEYRING_PTR_SUBTYPE);
  55	return key;
  56}
  57
  58static struct list_head	keyring_name_hash[KEYRING_NAME_HASH_SIZE];
  59static DEFINE_RWLOCK(keyring_name_lock);
  60
  61static inline unsigned keyring_hash(const char *desc)
  62{
  63	unsigned bucket = 0;
  64
  65	for (; *desc; desc++)
  66		bucket += (unsigned char)*desc;
  67
  68	return bucket & (KEYRING_NAME_HASH_SIZE - 1);
  69}
  70
  71/*
  72 * The keyring key type definition.  Keyrings are simply keys of this type and
  73 * can be treated as ordinary keys in addition to having their own special
  74 * operations.
  75 */
  76static int keyring_preparse(struct key_preparsed_payload *prep);
  77static void keyring_free_preparse(struct key_preparsed_payload *prep);
  78static int keyring_instantiate(struct key *keyring,
  79			       struct key_preparsed_payload *prep);
 
  80static void keyring_revoke(struct key *keyring);
  81static void keyring_destroy(struct key *keyring);
  82static void keyring_describe(const struct key *keyring, struct seq_file *m);
  83static long keyring_read(const struct key *keyring,
  84			 char __user *buffer, size_t buflen);
  85
  86struct key_type key_type_keyring = {
  87	.name		= "keyring",
  88	.def_datalen	= 0,
  89	.preparse	= keyring_preparse,
  90	.free_preparse	= keyring_free_preparse,
  91	.instantiate	= keyring_instantiate,
 
  92	.revoke		= keyring_revoke,
  93	.destroy	= keyring_destroy,
  94	.describe	= keyring_describe,
  95	.read		= keyring_read,
  96};
  97EXPORT_SYMBOL(key_type_keyring);
  98
  99/*
 100 * Semaphore to serialise link/link calls to prevent two link calls in parallel
 101 * introducing a cycle.
 102 */
 103static DECLARE_RWSEM(keyring_serialise_link_sem);
 104
 105/*
 106 * Publish the name of a keyring so that it can be found by name (if it has
 107 * one).
 108 */
 109static void keyring_publish_name(struct key *keyring)
 110{
 111	int bucket;
 112
 113	if (keyring->description) {
 114		bucket = keyring_hash(keyring->description);
 115
 116		write_lock(&keyring_name_lock);
 117
 118		if (!keyring_name_hash[bucket].next)
 119			INIT_LIST_HEAD(&keyring_name_hash[bucket]);
 120
 121		list_add_tail(&keyring->name_link,
 122			      &keyring_name_hash[bucket]);
 123
 124		write_unlock(&keyring_name_lock);
 125	}
 126}
 127
 128/*
 129 * Preparse a keyring payload
 130 */
 131static int keyring_preparse(struct key_preparsed_payload *prep)
 132{
 133	return prep->datalen != 0 ? -EINVAL : 0;
 134}
 135
 136/*
 137 * Free a preparse of a user defined key payload
 138 */
 139static void keyring_free_preparse(struct key_preparsed_payload *prep)
 140{
 141}
 142
 143/*
 144 * Initialise a keyring.
 145 *
 146 * Returns 0 on success, -EINVAL if given any data.
 147 */
 148static int keyring_instantiate(struct key *keyring,
 149			       struct key_preparsed_payload *prep)
 150{
 151	assoc_array_init(&keyring->keys);
 152	/* make the keyring available by name if it has one */
 153	keyring_publish_name(keyring);
 154	return 0;
 155}
 156
 157/*
 158 * Multiply 64-bits by 32-bits to 96-bits and fold back to 64-bit.  Ideally we'd
 159 * fold the carry back too, but that requires inline asm.
 160 */
 161static u64 mult_64x32_and_fold(u64 x, u32 y)
 162{
 163	u64 hi = (u64)(u32)(x >> 32) * y;
 164	u64 lo = (u64)(u32)(x) * y;
 165	return lo + ((u64)(u32)hi << 32) + (u32)(hi >> 32);
 166}
 167
 168/*
 169 * Hash a key type and description.
 170 */
 171static unsigned long hash_key_type_and_desc(const struct keyring_index_key *index_key)
 172{
 173	const unsigned level_shift = ASSOC_ARRAY_LEVEL_STEP;
 174	const unsigned long fan_mask = ASSOC_ARRAY_FAN_MASK;
 175	const char *description = index_key->description;
 176	unsigned long hash, type;
 177	u32 piece;
 178	u64 acc;
 179	int n, desc_len = index_key->desc_len;
 180
 181	type = (unsigned long)index_key->type;
 182
 183	acc = mult_64x32_and_fold(type, desc_len + 13);
 184	acc = mult_64x32_and_fold(acc, 9207);
 185	for (;;) {
 186		n = desc_len;
 187		if (n <= 0)
 188			break;
 189		if (n > 4)
 190			n = 4;
 191		piece = 0;
 192		memcpy(&piece, description, n);
 193		description += n;
 194		desc_len -= n;
 195		acc = mult_64x32_and_fold(acc, piece);
 196		acc = mult_64x32_and_fold(acc, 9207);
 197	}
 198
 199	/* Fold the hash down to 32 bits if need be. */
 200	hash = acc;
 201	if (ASSOC_ARRAY_KEY_CHUNK_SIZE == 32)
 202		hash ^= acc >> 32;
 203
 204	/* Squidge all the keyrings into a separate part of the tree to
 205	 * ordinary keys by making sure the lowest level segment in the hash is
 206	 * zero for keyrings and non-zero otherwise.
 207	 */
 208	if (index_key->type != &key_type_keyring && (hash & fan_mask) == 0)
 209		return hash | (hash >> (ASSOC_ARRAY_KEY_CHUNK_SIZE - level_shift)) | 1;
 210	if (index_key->type == &key_type_keyring && (hash & fan_mask) != 0)
 211		return (hash + (hash << level_shift)) & ~fan_mask;
 212	return hash;
 213}
 214
 215/*
 216 * Build the next index key chunk.
 217 *
 218 * On 32-bit systems the index key is laid out as:
 219 *
 220 *	0	4	5	9...
 221 *	hash	desclen	typeptr	desc[]
 222 *
 223 * On 64-bit systems:
 224 *
 225 *	0	8	9	17...
 226 *	hash	desclen	typeptr	desc[]
 227 *
 228 * We return it one word-sized chunk at a time.
 229 */
 230static unsigned long keyring_get_key_chunk(const void *data, int level)
 231{
 232	const struct keyring_index_key *index_key = data;
 233	unsigned long chunk = 0;
 234	long offset = 0;
 235	int desc_len = index_key->desc_len, n = sizeof(chunk);
 236
 237	level /= ASSOC_ARRAY_KEY_CHUNK_SIZE;
 238	switch (level) {
 239	case 0:
 240		return hash_key_type_and_desc(index_key);
 241	case 1:
 242		return ((unsigned long)index_key->type << 8) | desc_len;
 243	case 2:
 244		if (desc_len == 0)
 245			return (u8)((unsigned long)index_key->type >>
 246				    (ASSOC_ARRAY_KEY_CHUNK_SIZE - 8));
 247		n--;
 248		offset = 1;
 249	default:
 250		offset += sizeof(chunk) - 1;
 251		offset += (level - 3) * sizeof(chunk);
 252		if (offset >= desc_len)
 253			return 0;
 254		desc_len -= offset;
 255		if (desc_len > n)
 256			desc_len = n;
 257		offset += desc_len;
 258		do {
 259			chunk <<= 8;
 260			chunk |= ((u8*)index_key->description)[--offset];
 261		} while (--desc_len > 0);
 262
 263		if (level == 2) {
 264			chunk <<= 8;
 265			chunk |= (u8)((unsigned long)index_key->type >>
 266				      (ASSOC_ARRAY_KEY_CHUNK_SIZE - 8));
 267		}
 268		return chunk;
 269	}
 270}
 271
 272static unsigned long keyring_get_object_key_chunk(const void *object, int level)
 273{
 274	const struct key *key = keyring_ptr_to_key(object);
 275	return keyring_get_key_chunk(&key->index_key, level);
 276}
 277
 278static bool keyring_compare_object(const void *object, const void *data)
 279{
 280	const struct keyring_index_key *index_key = data;
 281	const struct key *key = keyring_ptr_to_key(object);
 282
 283	return key->index_key.type == index_key->type &&
 284		key->index_key.desc_len == index_key->desc_len &&
 285		memcmp(key->index_key.description, index_key->description,
 286		       index_key->desc_len) == 0;
 287}
 288
 289/*
 290 * Compare the index keys of a pair of objects and determine the bit position
 291 * at which they differ - if they differ.
 292 */
 293static int keyring_diff_objects(const void *object, const void *data)
 294{
 295	const struct key *key_a = keyring_ptr_to_key(object);
 296	const struct keyring_index_key *a = &key_a->index_key;
 297	const struct keyring_index_key *b = data;
 298	unsigned long seg_a, seg_b;
 299	int level, i;
 300
 301	level = 0;
 302	seg_a = hash_key_type_and_desc(a);
 303	seg_b = hash_key_type_and_desc(b);
 304	if ((seg_a ^ seg_b) != 0)
 305		goto differ;
 306
 307	/* The number of bits contributed by the hash is controlled by a
 308	 * constant in the assoc_array headers.  Everything else thereafter we
 309	 * can deal with as being machine word-size dependent.
 310	 */
 311	level += ASSOC_ARRAY_KEY_CHUNK_SIZE / 8;
 312	seg_a = a->desc_len;
 313	seg_b = b->desc_len;
 314	if ((seg_a ^ seg_b) != 0)
 315		goto differ;
 316
 317	/* The next bit may not work on big endian */
 318	level++;
 319	seg_a = (unsigned long)a->type;
 320	seg_b = (unsigned long)b->type;
 321	if ((seg_a ^ seg_b) != 0)
 322		goto differ;
 323
 324	level += sizeof(unsigned long);
 325	if (a->desc_len == 0)
 326		goto same;
 327
 328	i = 0;
 329	if (((unsigned long)a->description | (unsigned long)b->description) &
 330	    (sizeof(unsigned long) - 1)) {
 331		do {
 332			seg_a = *(unsigned long *)(a->description + i);
 333			seg_b = *(unsigned long *)(b->description + i);
 334			if ((seg_a ^ seg_b) != 0)
 335				goto differ_plus_i;
 336			i += sizeof(unsigned long);
 337		} while (i < (a->desc_len & (sizeof(unsigned long) - 1)));
 338	}
 339
 340	for (; i < a->desc_len; i++) {
 341		seg_a = *(unsigned char *)(a->description + i);
 342		seg_b = *(unsigned char *)(b->description + i);
 343		if ((seg_a ^ seg_b) != 0)
 344			goto differ_plus_i;
 345	}
 346
 347same:
 348	return -1;
 349
 350differ_plus_i:
 351	level += i;
 352differ:
 353	i = level * 8 + __ffs(seg_a ^ seg_b);
 354	return i;
 355}
 356
 357/*
 358 * Free an object after stripping the keyring flag off of the pointer.
 359 */
 360static void keyring_free_object(void *object)
 361{
 362	key_put(keyring_ptr_to_key(object));
 
 363}
 364
 365/*
 366 * Operations for keyring management by the index-tree routines.
 367 */
 368static const struct assoc_array_ops keyring_assoc_array_ops = {
 369	.get_key_chunk		= keyring_get_key_chunk,
 370	.get_object_key_chunk	= keyring_get_object_key_chunk,
 371	.compare_object		= keyring_compare_object,
 372	.diff_objects		= keyring_diff_objects,
 373	.free_object		= keyring_free_object,
 374};
 375
 376/*
 377 * Clean up a keyring when it is destroyed.  Unpublish its name if it had one
 378 * and dispose of its data.
 379 *
 380 * The garbage collector detects the final key_put(), removes the keyring from
 381 * the serial number tree and then does RCU synchronisation before coming here,
 382 * so we shouldn't need to worry about code poking around here with the RCU
 383 * readlock held by this time.
 384 */
 385static void keyring_destroy(struct key *keyring)
 386{
 
 
 
 387	if (keyring->description) {
 388		write_lock(&keyring_name_lock);
 389
 390		if (keyring->name_link.next != NULL &&
 391		    !list_empty(&keyring->name_link))
 392			list_del(&keyring->name_link);
 393
 394		write_unlock(&keyring_name_lock);
 395	}
 396
 397	if (keyring->restrict_link) {
 398		struct key_restriction *keyres = keyring->restrict_link;
 399
 400		key_put(keyres->key);
 401		kfree(keyres);
 
 402	}
 403
 404	assoc_array_destroy(&keyring->keys, &keyring_assoc_array_ops);
 405}
 406
 407/*
 408 * Describe a keyring for /proc.
 409 */
 410static void keyring_describe(const struct key *keyring, struct seq_file *m)
 411{
 
 
 412	if (keyring->description)
 413		seq_puts(m, keyring->description);
 414	else
 415		seq_puts(m, "[anon]");
 416
 417	if (key_is_positive(keyring)) {
 418		if (keyring->keys.nr_leaves_on_tree != 0)
 419			seq_printf(m, ": %lu", keyring->keys.nr_leaves_on_tree);
 
 
 420		else
 421			seq_puts(m, ": empty");
 
 422	}
 423}
 424
 425struct keyring_read_iterator_context {
 426	size_t			buflen;
 427	size_t			count;
 428	key_serial_t __user	*buffer;
 429};
 430
 431static int keyring_read_iterator(const void *object, void *data)
 432{
 433	struct keyring_read_iterator_context *ctx = data;
 434	const struct key *key = keyring_ptr_to_key(object);
 435	int ret;
 436
 437	kenter("{%s,%d},,{%zu/%zu}",
 438	       key->type->name, key->serial, ctx->count, ctx->buflen);
 439
 440	if (ctx->count >= ctx->buflen)
 441		return 1;
 442
 443	ret = put_user(key->serial, ctx->buffer);
 444	if (ret < 0)
 445		return ret;
 446	ctx->buffer++;
 447	ctx->count += sizeof(key->serial);
 448	return 0;
 449}
 450
 451/*
 452 * Read a list of key IDs from the keyring's contents in binary form
 453 *
 454 * The keyring's semaphore is read-locked by the caller.  This prevents someone
 455 * from modifying it under us - which could cause us to read key IDs multiple
 456 * times.
 457 */
 458static long keyring_read(const struct key *keyring,
 459			 char __user *buffer, size_t buflen)
 460{
 461	struct keyring_read_iterator_context ctx;
 462	long ret;
 
 
 463
 464	kenter("{%d},,%zu", key_serial(keyring), buflen);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 465
 466	if (buflen & (sizeof(key_serial_t) - 1))
 467		return -EINVAL;
 468
 469	/* Copy as many key IDs as fit into the buffer */
 470	if (buffer && buflen) {
 471		ctx.buffer = (key_serial_t __user *)buffer;
 472		ctx.buflen = buflen;
 473		ctx.count = 0;
 474		ret = assoc_array_iterate(&keyring->keys,
 475					  keyring_read_iterator, &ctx);
 476		if (ret < 0) {
 477			kleave(" = %ld [iterate]", ret);
 478			return ret;
 479		}
 480	}
 481
 482	/* Return the size of the buffer needed */
 483	ret = keyring->keys.nr_leaves_on_tree * sizeof(key_serial_t);
 484	if (ret <= buflen)
 485		kleave("= %ld [ok]", ret);
 486	else
 487		kleave("= %ld [buffer too small]", ret);
 488	return ret;
 489}
 490
 491/*
 492 * Allocate a keyring and link into the destination keyring.
 493 */
 494struct key *keyring_alloc(const char *description, kuid_t uid, kgid_t gid,
 495			  const struct cred *cred, key_perm_t perm,
 496			  unsigned long flags,
 497			  struct key_restriction *restrict_link,
 498			  struct key *dest)
 499{
 500	struct key *keyring;
 501	int ret;
 502
 503	keyring = key_alloc(&key_type_keyring, description,
 504			    uid, gid, cred, perm, flags, restrict_link);
 
 
 
 505	if (!IS_ERR(keyring)) {
 506		ret = key_instantiate_and_link(keyring, NULL, 0, dest, NULL);
 507		if (ret < 0) {
 508			key_put(keyring);
 509			keyring = ERR_PTR(ret);
 510		}
 511	}
 512
 513	return keyring;
 514}
 515EXPORT_SYMBOL(keyring_alloc);
 516
 517/**
 518 * restrict_link_reject - Give -EPERM to restrict link
 519 * @keyring: The keyring being added to.
 520 * @type: The type of key being added.
 521 * @payload: The payload of the key intended to be added.
 522 * @data: Additional data for evaluating restriction.
 523 *
 524 * Reject the addition of any links to a keyring.  It can be overridden by
 525 * passing KEY_ALLOC_BYPASS_RESTRICTION to key_instantiate_and_link() when
 526 * adding a key to a keyring.
 527 *
 528 * This is meant to be stored in a key_restriction structure which is passed
 529 * in the restrict_link parameter to keyring_alloc().
 530 */
 531int restrict_link_reject(struct key *keyring,
 532			 const struct key_type *type,
 533			 const union key_payload *payload,
 534			 struct key *restriction_key)
 535{
 536	return -EPERM;
 537}
 538
 539/*
 540 * By default, we keys found by getting an exact match on their descriptions.
 541 */
 542bool key_default_cmp(const struct key *key,
 543		     const struct key_match_data *match_data)
 544{
 545	return strcmp(key->description, match_data->raw_data) == 0;
 546}
 547
 548/*
 549 * Iteration function to consider each key found.
 550 */
 551static int keyring_search_iterator(const void *object, void *iterator_data)
 552{
 553	struct keyring_search_context *ctx = iterator_data;
 554	const struct key *key = keyring_ptr_to_key(object);
 555	unsigned long kflags = READ_ONCE(key->flags);
 556	short state = READ_ONCE(key->state);
 557
 558	kenter("{%d}", key->serial);
 559
 560	/* ignore keys not of this type */
 561	if (key->type != ctx->index_key.type) {
 562		kleave(" = 0 [!type]");
 563		return 0;
 564	}
 565
 566	/* skip invalidated, revoked and expired keys */
 567	if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
 568		time64_t expiry = READ_ONCE(key->expiry);
 569
 570		if (kflags & ((1 << KEY_FLAG_INVALIDATED) |
 571			      (1 << KEY_FLAG_REVOKED))) {
 572			ctx->result = ERR_PTR(-EKEYREVOKED);
 573			kleave(" = %d [invrev]", ctx->skipped_ret);
 574			goto skipped;
 575		}
 576
 577		if (expiry && ctx->now >= expiry) {
 578			if (!(ctx->flags & KEYRING_SEARCH_SKIP_EXPIRED))
 579				ctx->result = ERR_PTR(-EKEYEXPIRED);
 580			kleave(" = %d [expire]", ctx->skipped_ret);
 581			goto skipped;
 582		}
 583	}
 584
 585	/* keys that don't match */
 586	if (!ctx->match_data.cmp(key, &ctx->match_data)) {
 587		kleave(" = 0 [!match]");
 588		return 0;
 589	}
 590
 591	/* key must have search permissions */
 592	if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) &&
 593	    key_task_permission(make_key_ref(key, ctx->possessed),
 594				ctx->cred, KEY_NEED_SEARCH) < 0) {
 595		ctx->result = ERR_PTR(-EACCES);
 596		kleave(" = %d [!perm]", ctx->skipped_ret);
 597		goto skipped;
 598	}
 599
 600	if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
 601		/* we set a different error code if we pass a negative key */
 602		if (state < 0) {
 603			ctx->result = ERR_PTR(state);
 604			kleave(" = %d [neg]", ctx->skipped_ret);
 605			goto skipped;
 606		}
 607	}
 608
 609	/* Found */
 610	ctx->result = make_key_ref(key, ctx->possessed);
 611	kleave(" = 1 [found]");
 612	return 1;
 613
 614skipped:
 615	return ctx->skipped_ret;
 616}
 617
 618/*
 619 * Search inside a keyring for a key.  We can search by walking to it
 620 * directly based on its index-key or we can iterate over the entire
 621 * tree looking for it, based on the match function.
 622 */
 623static int search_keyring(struct key *keyring, struct keyring_search_context *ctx)
 624{
 625	if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_DIRECT) {
 626		const void *object;
 627
 628		object = assoc_array_find(&keyring->keys,
 629					  &keyring_assoc_array_ops,
 630					  &ctx->index_key);
 631		return object ? ctx->iterator(object, ctx) : 0;
 632	}
 633	return assoc_array_iterate(&keyring->keys, ctx->iterator, ctx);
 634}
 635
 636/*
 637 * Search a tree of keyrings that point to other keyrings up to the maximum
 638 * depth.
 639 */
 640static bool search_nested_keyrings(struct key *keyring,
 641				   struct keyring_search_context *ctx)
 642{
 643	struct {
 644		struct key *keyring;
 645		struct assoc_array_node *node;
 646		int slot;
 647	} stack[KEYRING_SEARCH_MAX_DEPTH];
 648
 649	struct assoc_array_shortcut *shortcut;
 650	struct assoc_array_node *node;
 651	struct assoc_array_ptr *ptr;
 652	struct key *key;
 653	int sp = 0, slot;
 654
 655	kenter("{%d},{%s,%s}",
 656	       keyring->serial,
 657	       ctx->index_key.type->name,
 658	       ctx->index_key.description);
 659
 660#define STATE_CHECKS (KEYRING_SEARCH_NO_STATE_CHECK | KEYRING_SEARCH_DO_STATE_CHECK)
 661	BUG_ON((ctx->flags & STATE_CHECKS) == 0 ||
 662	       (ctx->flags & STATE_CHECKS) == STATE_CHECKS);
 663
 664	if (ctx->index_key.description)
 665		ctx->index_key.desc_len = strlen(ctx->index_key.description);
 666
 667	/* Check to see if this top-level keyring is what we are looking for
 668	 * and whether it is valid or not.
 669	 */
 670	if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_ITERATE ||
 671	    keyring_compare_object(keyring, &ctx->index_key)) {
 672		ctx->skipped_ret = 2;
 673		switch (ctx->iterator(keyring_key_to_ptr(keyring), ctx)) {
 674		case 1:
 675			goto found;
 676		case 2:
 677			return false;
 678		default:
 679			break;
 680		}
 681	}
 682
 683	ctx->skipped_ret = 0;
 684
 685	/* Start processing a new keyring */
 686descend_to_keyring:
 687	kdebug("descend to %d", keyring->serial);
 688	if (keyring->flags & ((1 << KEY_FLAG_INVALIDATED) |
 689			      (1 << KEY_FLAG_REVOKED)))
 690		goto not_this_keyring;
 691
 692	/* Search through the keys in this keyring before its searching its
 693	 * subtrees.
 694	 */
 695	if (search_keyring(keyring, ctx))
 696		goto found;
 697
 698	/* Then manually iterate through the keyrings nested in this one.
 699	 *
 700	 * Start from the root node of the index tree.  Because of the way the
 701	 * hash function has been set up, keyrings cluster on the leftmost
 702	 * branch of the root node (root slot 0) or in the root node itself.
 703	 * Non-keyrings avoid the leftmost branch of the root entirely (root
 704	 * slots 1-15).
 705	 */
 706	ptr = READ_ONCE(keyring->keys.root);
 707	if (!ptr)
 708		goto not_this_keyring;
 709
 710	if (assoc_array_ptr_is_shortcut(ptr)) {
 711		/* If the root is a shortcut, either the keyring only contains
 712		 * keyring pointers (everything clusters behind root slot 0) or
 713		 * doesn't contain any keyring pointers.
 714		 */
 715		shortcut = assoc_array_ptr_to_shortcut(ptr);
 716		if ((shortcut->index_key[0] & ASSOC_ARRAY_FAN_MASK) != 0)
 717			goto not_this_keyring;
 718
 719		ptr = READ_ONCE(shortcut->next_node);
 720		node = assoc_array_ptr_to_node(ptr);
 721		goto begin_node;
 722	}
 723
 724	node = assoc_array_ptr_to_node(ptr);
 725	ptr = node->slots[0];
 726	if (!assoc_array_ptr_is_meta(ptr))
 727		goto begin_node;
 728
 729descend_to_node:
 730	/* Descend to a more distal node in this keyring's content tree and go
 731	 * through that.
 732	 */
 733	kdebug("descend");
 734	if (assoc_array_ptr_is_shortcut(ptr)) {
 735		shortcut = assoc_array_ptr_to_shortcut(ptr);
 736		ptr = READ_ONCE(shortcut->next_node);
 737		BUG_ON(!assoc_array_ptr_is_node(ptr));
 738	}
 739	node = assoc_array_ptr_to_node(ptr);
 740
 741begin_node:
 742	kdebug("begin_node");
 743	slot = 0;
 744ascend_to_node:
 745	/* Go through the slots in a node */
 746	for (; slot < ASSOC_ARRAY_FAN_OUT; slot++) {
 747		ptr = READ_ONCE(node->slots[slot]);
 748
 749		if (assoc_array_ptr_is_meta(ptr) && node->back_pointer)
 750			goto descend_to_node;
 751
 752		if (!keyring_ptr_is_keyring(ptr))
 753			continue;
 754
 755		key = keyring_ptr_to_key(ptr);
 756
 757		if (sp >= KEYRING_SEARCH_MAX_DEPTH) {
 758			if (ctx->flags & KEYRING_SEARCH_DETECT_TOO_DEEP) {
 759				ctx->result = ERR_PTR(-ELOOP);
 760				return false;
 761			}
 762			goto not_this_keyring;
 763		}
 764
 765		/* Search a nested keyring */
 766		if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) &&
 767		    key_task_permission(make_key_ref(key, ctx->possessed),
 768					ctx->cred, KEY_NEED_SEARCH) < 0)
 769			continue;
 770
 771		/* stack the current position */
 772		stack[sp].keyring = keyring;
 773		stack[sp].node = node;
 774		stack[sp].slot = slot;
 775		sp++;
 776
 777		/* begin again with the new keyring */
 778		keyring = key;
 779		goto descend_to_keyring;
 780	}
 781
 782	/* We've dealt with all the slots in the current node, so now we need
 783	 * to ascend to the parent and continue processing there.
 784	 */
 785	ptr = READ_ONCE(node->back_pointer);
 786	slot = node->parent_slot;
 787
 788	if (ptr && assoc_array_ptr_is_shortcut(ptr)) {
 789		shortcut = assoc_array_ptr_to_shortcut(ptr);
 790		ptr = READ_ONCE(shortcut->back_pointer);
 791		slot = shortcut->parent_slot;
 792	}
 793	if (!ptr)
 794		goto not_this_keyring;
 795	node = assoc_array_ptr_to_node(ptr);
 796	slot++;
 797
 798	/* If we've ascended to the root (zero backpointer), we must have just
 799	 * finished processing the leftmost branch rather than the root slots -
 800	 * so there can't be any more keyrings for us to find.
 801	 */
 802	if (node->back_pointer) {
 803		kdebug("ascend %d", slot);
 804		goto ascend_to_node;
 805	}
 806
 807	/* The keyring we're looking at was disqualified or didn't contain a
 808	 * matching key.
 809	 */
 810not_this_keyring:
 811	kdebug("not_this_keyring %d", sp);
 812	if (sp <= 0) {
 813		kleave(" = false");
 814		return false;
 815	}
 816
 817	/* Resume the processing of a keyring higher up in the tree */
 818	sp--;
 819	keyring = stack[sp].keyring;
 820	node = stack[sp].node;
 821	slot = stack[sp].slot + 1;
 822	kdebug("ascend to %d [%d]", keyring->serial, slot);
 823	goto ascend_to_node;
 824
 825	/* We found a viable match */
 826found:
 827	key = key_ref_to_ptr(ctx->result);
 828	key_check(key);
 829	if (!(ctx->flags & KEYRING_SEARCH_NO_UPDATE_TIME)) {
 830		key->last_used_at = ctx->now;
 831		keyring->last_used_at = ctx->now;
 832		while (sp > 0)
 833			stack[--sp].keyring->last_used_at = ctx->now;
 834	}
 835	kleave(" = true");
 836	return true;
 837}
 838
 839/**
 840 * keyring_search_aux - Search a keyring tree for a key matching some criteria
 841 * @keyring_ref: A pointer to the keyring with possession indicator.
 842 * @ctx: The keyring search context.
 
 
 
 
 843 *
 844 * Search the supplied keyring tree for a key that matches the criteria given.
 845 * The root keyring and any linked keyrings must grant Search permission to the
 846 * caller to be searchable and keys can only be found if they too grant Search
 847 * to the caller. The possession flag on the root keyring pointer controls use
 848 * of the possessor bits in permissions checking of the entire tree.  In
 849 * addition, the LSM gets to forbid keyring searches and key matches.
 850 *
 851 * The search is performed as a breadth-then-depth search up to the prescribed
 852 * limit (KEYRING_SEARCH_MAX_DEPTH).
 853 *
 854 * Keys are matched to the type provided and are then filtered by the match
 855 * function, which is given the description to use in any way it sees fit.  The
 856 * match function may use any attributes of a key that it wishes to to
 857 * determine the match.  Normally the match function from the key type would be
 858 * used.
 859 *
 860 * RCU can be used to prevent the keyring key lists from disappearing without
 861 * the need to take lots of locks.
 862 *
 863 * Returns a pointer to the found key and increments the key usage count if
 864 * successful; -EAGAIN if no matching keys were found, or if expired or revoked
 865 * keys were found; -ENOKEY if only negative keys were found; -ENOTDIR if the
 866 * specified keyring wasn't a keyring.
 867 *
 868 * In the case of a successful return, the possession attribute from
 869 * @keyring_ref is propagated to the returned key reference.
 870 */
 871key_ref_t keyring_search_aux(key_ref_t keyring_ref,
 872			     struct keyring_search_context *ctx)
 
 
 
 
 873{
 874	struct key *keyring;
 
 
 
 
 
 
 
 
 
 875	long err;
 876
 877	ctx->iterator = keyring_search_iterator;
 878	ctx->possessed = is_key_possessed(keyring_ref);
 879	ctx->result = ERR_PTR(-EAGAIN);
 880
 881	keyring = key_ref_to_ptr(keyring_ref);
 
 882	key_check(keyring);
 883
 
 
 
 
 
 
 
 
 884	if (keyring->type != &key_type_keyring)
 885		return ERR_PTR(-ENOTDIR);
 886
 887	if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM)) {
 888		err = key_task_permission(keyring_ref, ctx->cred, KEY_NEED_SEARCH);
 889		if (err < 0)
 890			return ERR_PTR(err);
 891	}
 892
 893	rcu_read_lock();
 894	ctx->now = ktime_get_real_seconds();
 895	if (search_nested_keyrings(keyring, ctx))
 896		__key_get(key_ref_to_ptr(ctx->result));
 897	rcu_read_unlock();
 898	return ctx->result;
 899}
 900
 901/**
 902 * keyring_search - Search the supplied keyring tree for a matching key
 903 * @keyring: The root of the keyring tree to be searched.
 904 * @type: The type of keyring we want to find.
 905 * @description: The name of the keyring we want to find.
 906 *
 907 * As keyring_search_aux() above, but using the current task's credentials and
 908 * type's default matching function and preferred search method.
 909 */
 910key_ref_t keyring_search(key_ref_t keyring,
 911			 struct key_type *type,
 912			 const char *description)
 913{
 914	struct keyring_search_context ctx = {
 915		.index_key.type		= type,
 916		.index_key.description	= description,
 917		.cred			= current_cred(),
 918		.match_data.cmp		= key_default_cmp,
 919		.match_data.raw_data	= description,
 920		.match_data.lookup_type	= KEYRING_SEARCH_LOOKUP_DIRECT,
 921		.flags			= KEYRING_SEARCH_DO_STATE_CHECK,
 922	};
 923	key_ref_t key;
 924	int ret;
 925
 926	if (type->match_preparse) {
 927		ret = type->match_preparse(&ctx.match_data);
 928		if (ret < 0)
 929			return ERR_PTR(ret);
 
 
 
 
 
 
 930	}
 931
 932	key = keyring_search_aux(keyring, &ctx);
 
 
 
 
 
 933
 934	if (type->match_free)
 935		type->match_free(&ctx.match_data);
 936	return key;
 937}
 938EXPORT_SYMBOL(keyring_search);
 939
 940static struct key_restriction *keyring_restriction_alloc(
 941	key_restrict_link_func_t check)
 942{
 943	struct key_restriction *keyres =
 944		kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
 945
 946	if (!keyres)
 947		return ERR_PTR(-ENOMEM);
 
 
 948
 949	keyres->check = check;
 
 
 950
 951	return keyres;
 952}
 
 
 953
 954/*
 955 * Semaphore to serialise restriction setup to prevent reference count
 956 * cycles through restriction key pointers.
 957 */
 958static DECLARE_RWSEM(keyring_serialise_restrict_sem);
 959
 960/*
 961 * Check for restriction cycles that would prevent keyring garbage collection.
 962 * keyring_serialise_restrict_sem must be held.
 963 */
 964static bool keyring_detect_restriction_cycle(const struct key *dest_keyring,
 965					     struct key_restriction *keyres)
 966{
 967	while (keyres && keyres->key &&
 968	       keyres->key->type == &key_type_keyring) {
 969		if (keyres->key == dest_keyring)
 970			return true;
 971
 972		keyres = keyres->key->restrict_link;
 973	}
 
 
 974
 975	return false;
 976}
 977
 978/**
 979 * keyring_restrict - Look up and apply a restriction to a keyring
 980 *
 981 * @keyring: The keyring to be restricted
 982 * @restriction: The restriction options to apply to the keyring
 983 */
 984int keyring_restrict(key_ref_t keyring_ref, const char *type,
 985		     const char *restriction)
 986{
 987	struct key *keyring;
 988	struct key_type *restrict_type = NULL;
 989	struct key_restriction *restrict_link;
 990	int ret = 0;
 991
 992	keyring = key_ref_to_ptr(keyring_ref);
 993	key_check(keyring);
 994
 995	if (keyring->type != &key_type_keyring)
 996		return -ENOTDIR;
 
 
 
 
 
 997
 998	if (!type) {
 999		restrict_link = keyring_restriction_alloc(restrict_link_reject);
1000	} else {
1001		restrict_type = key_type_lookup(type);
 
1002
1003		if (IS_ERR(restrict_type))
1004			return PTR_ERR(restrict_type);
 
1005
1006		if (!restrict_type->lookup_restriction) {
1007			ret = -ENOENT;
1008			goto error;
1009		}
1010
1011		restrict_link = restrict_type->lookup_restriction(restriction);
 
 
1012	}
1013
1014	if (IS_ERR(restrict_link)) {
1015		ret = PTR_ERR(restrict_link);
1016		goto error;
 
 
 
 
 
 
1017	}
1018
1019	down_write(&keyring->sem);
1020	down_write(&keyring_serialise_restrict_sem);
1021
1022	if (keyring->restrict_link)
1023		ret = -EEXIST;
1024	else if (keyring_detect_restriction_cycle(keyring, restrict_link))
1025		ret = -EDEADLK;
1026	else
1027		keyring->restrict_link = restrict_link;
 
 
 
 
1028
1029	up_write(&keyring_serialise_restrict_sem);
1030	up_write(&keyring->sem);
1031
1032	if (ret < 0) {
1033		key_put(restrict_link->key);
1034		kfree(restrict_link);
1035	}
 
 
 
 
 
 
 
 
1036
1037error:
1038	if (restrict_type)
1039		key_type_put(restrict_type);
1040
1041	return ret;
1042}
1043EXPORT_SYMBOL(keyring_restrict);
1044
1045/*
1046 * Search the given keyring for a key that might be updated.
1047 *
1048 * The caller must guarantee that the keyring is a keyring and that the
1049 * permission is granted to modify the keyring as no check is made here.  The
1050 * caller must also hold a lock on the keyring semaphore.
 
1051 *
1052 * Returns a pointer to the found key with usage count incremented if
1053 * successful and returns NULL if not found.  Revoked and invalidated keys are
1054 * skipped over.
1055 *
1056 * If successful, the possession indicator is propagated from the keyring ref
1057 * to the returned key reference.
1058 */
1059key_ref_t find_key_to_update(key_ref_t keyring_ref,
1060			     const struct keyring_index_key *index_key)
 
 
1061{
 
 
1062	struct key *keyring, *key;
1063	const void *object;
1064
1065	keyring = key_ref_to_ptr(keyring_ref);
 
1066
1067	kenter("{%d},{%s,%s}",
1068	       keyring->serial, index_key->type->name, index_key->description);
1069
1070	object = assoc_array_find(&keyring->keys, &keyring_assoc_array_ops,
1071				  index_key);
 
 
 
 
 
 
 
 
 
 
 
 
 
1072
1073	if (object)
1074		goto found;
1075
1076	kleave(" = NULL");
1077	return NULL;
1078
1079found:
1080	key = keyring_ptr_to_key(object);
1081	if (key->flags & ((1 << KEY_FLAG_INVALIDATED) |
1082			  (1 << KEY_FLAG_REVOKED))) {
1083		kleave(" = NULL [x]");
1084		return NULL;
1085	}
1086	__key_get(key);
1087	kleave(" = {%d}", key->serial);
1088	return make_key_ref(key, is_key_possessed(keyring_ref));
1089}
1090
1091/*
1092 * Find a keyring with the specified name.
1093 *
1094 * Only keyrings that have nonzero refcount, are not revoked, and are owned by a
1095 * user in the current user namespace are considered.  If @uid_keyring is %true,
1096 * the keyring additionally must have been allocated as a user or user session
1097 * keyring; otherwise, it must grant Search permission directly to the caller.
1098 *
1099 * Returns a pointer to the keyring with the keyring's refcount having being
1100 * incremented on success.  -ENOKEY is returned if a key could not be found.
1101 */
1102struct key *find_keyring_by_name(const char *name, bool uid_keyring)
1103{
1104	struct key *keyring;
1105	int bucket;
1106
1107	if (!name)
1108		return ERR_PTR(-EINVAL);
1109
1110	bucket = keyring_hash(name);
1111
1112	read_lock(&keyring_name_lock);
1113
1114	if (keyring_name_hash[bucket].next) {
1115		/* search this hash bucket for a keyring with a matching name
1116		 * that's readable and that hasn't been revoked */
1117		list_for_each_entry(keyring,
1118				    &keyring_name_hash[bucket],
1119				    name_link
1120				    ) {
1121			if (!kuid_has_mapping(current_user_ns(), keyring->user->uid))
1122				continue;
1123
1124			if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
1125				continue;
1126
1127			if (strcmp(keyring->description, name) != 0)
1128				continue;
1129
1130			if (uid_keyring) {
1131				if (!test_bit(KEY_FLAG_UID_KEYRING,
1132					      &keyring->flags))
1133					continue;
1134			} else {
1135				if (key_permission(make_key_ref(keyring, 0),
1136						   KEY_NEED_SEARCH) < 0)
1137					continue;
1138			}
1139
1140			/* we've got a match but we might end up racing with
1141			 * key_cleanup() if the keyring is currently 'dead'
1142			 * (ie. it has a zero usage count) */
1143			if (!refcount_inc_not_zero(&keyring->usage))
1144				continue;
1145			keyring->last_used_at = ktime_get_real_seconds();
1146			goto out;
1147		}
1148	}
1149
1150	keyring = ERR_PTR(-ENOKEY);
1151out:
1152	read_unlock(&keyring_name_lock);
1153	return keyring;
1154}
1155
1156static int keyring_detect_cycle_iterator(const void *object,
1157					 void *iterator_data)
1158{
1159	struct keyring_search_context *ctx = iterator_data;
1160	const struct key *key = keyring_ptr_to_key(object);
1161
1162	kenter("{%d}", key->serial);
1163
1164	/* We might get a keyring with matching index-key that is nonetheless a
1165	 * different keyring. */
1166	if (key != ctx->match_data.raw_data)
1167		return 0;
1168
1169	ctx->result = ERR_PTR(-EDEADLK);
1170	return 1;
1171}
1172
1173/*
1174 * See if a cycle will will be created by inserting acyclic tree B in acyclic
1175 * tree A at the topmost level (ie: as a direct child of A).
1176 *
1177 * Since we are adding B to A at the top level, checking for cycles should just
1178 * be a matter of seeing if node A is somewhere in tree B.
1179 */
1180static int keyring_detect_cycle(struct key *A, struct key *B)
1181{
1182	struct keyring_search_context ctx = {
1183		.index_key		= A->index_key,
1184		.match_data.raw_data	= A,
1185		.match_data.lookup_type = KEYRING_SEARCH_LOOKUP_DIRECT,
1186		.iterator		= keyring_detect_cycle_iterator,
1187		.flags			= (KEYRING_SEARCH_NO_STATE_CHECK |
1188					   KEYRING_SEARCH_NO_UPDATE_TIME |
1189					   KEYRING_SEARCH_NO_CHECK_PERM |
1190					   KEYRING_SEARCH_DETECT_TOO_DEEP),
1191	};
1192
1193	rcu_read_lock();
1194	search_nested_keyrings(B, &ctx);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1195	rcu_read_unlock();
1196	return PTR_ERR(ctx.result) == -EAGAIN ? 0 : PTR_ERR(ctx.result);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1197}
1198
1199/*
1200 * Preallocate memory so that a key can be linked into to a keyring.
1201 */
1202int __key_link_begin(struct key *keyring,
1203		     const struct keyring_index_key *index_key,
1204		     struct assoc_array_edit **_edit)
1205	__acquires(&keyring->sem)
1206	__acquires(&keyring_serialise_link_sem)
1207{
1208	struct assoc_array_edit *edit;
1209	int ret;
 
 
 
1210
1211	kenter("%d,%s,%s,",
1212	       keyring->serial, index_key->type->name, index_key->description);
1213
1214	BUG_ON(index_key->desc_len == 0);
1215
1216	if (keyring->type != &key_type_keyring)
1217		return -ENOTDIR;
1218
1219	down_write(&keyring->sem);
1220
1221	ret = -EKEYREVOKED;
1222	if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
1223		goto error_krsem;
1224
1225	/* serialise link/link calls to prevent parallel calls causing a cycle
1226	 * when linking two keyring in opposite orders */
1227	if (index_key->type == &key_type_keyring)
1228		down_write(&keyring_serialise_link_sem);
1229
1230	/* Create an edit script that will insert/replace the key in the
1231	 * keyring tree.
1232	 */
1233	edit = assoc_array_insert(&keyring->keys,
1234				  &keyring_assoc_array_ops,
1235				  index_key,
1236				  NULL);
1237	if (IS_ERR(edit)) {
1238		ret = PTR_ERR(edit);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1239		goto error_sem;
1240	}
1241
1242	/* If we're not replacing a link in-place then we're going to need some
1243	 * extra quota.
1244	 */
1245	if (!edit->dead_leaf) {
1246		ret = key_payload_reserve(keyring,
1247					  keyring->datalen + KEYQUOTA_LINK_BYTES);
1248		if (ret < 0)
1249			goto error_cancel;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1250	}
1251
1252	*_edit = edit;
 
 
1253	kleave(" = 0");
1254	return 0;
1255
1256error_cancel:
1257	assoc_array_cancel_edit(edit);
 
 
1258error_sem:
1259	if (index_key->type == &key_type_keyring)
1260		up_write(&keyring_serialise_link_sem);
1261error_krsem:
1262	up_write(&keyring->sem);
1263	kleave(" = %d", ret);
1264	return ret;
1265}
1266
1267/*
1268 * Check already instantiated keys aren't going to be a problem.
1269 *
1270 * The caller must have called __key_link_begin(). Don't need to call this for
1271 * keys that were created since __key_link_begin() was called.
1272 */
1273int __key_link_check_live_key(struct key *keyring, struct key *key)
1274{
1275	if (key->type == &key_type_keyring)
1276		/* check that we aren't going to create a cycle by linking one
1277		 * keyring to another */
1278		return keyring_detect_cycle(keyring, key);
1279	return 0;
1280}
1281
1282/*
1283 * Link a key into to a keyring.
1284 *
1285 * Must be called with __key_link_begin() having being called.  Discards any
1286 * already extant link to matching key if there is one, so that each keyring
1287 * holds at most one link to any given key of a particular type+description
1288 * combination.
1289 */
1290void __key_link(struct key *key, struct assoc_array_edit **_edit)
 
1291{
1292	__key_get(key);
1293	assoc_array_insert_set_object(*_edit, keyring_key_to_ptr(key));
1294	assoc_array_apply_edit(*_edit);
1295	*_edit = NULL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1296}
1297
1298/*
1299 * Finish linking a key into to a keyring.
1300 *
1301 * Must be called with __key_link_begin() having being called.
1302 */
1303void __key_link_end(struct key *keyring,
1304		    const struct keyring_index_key *index_key,
1305		    struct assoc_array_edit *edit)
1306	__releases(&keyring->sem)
1307	__releases(&keyring_serialise_link_sem)
1308{
1309	BUG_ON(index_key->type == NULL);
1310	kenter("%d,%s,", keyring->serial, index_key->type->name);
 
1311
1312	if (index_key->type == &key_type_keyring)
1313		up_write(&keyring_serialise_link_sem);
1314
1315	if (edit) {
1316		if (!edit->dead_leaf) {
1317			key_payload_reserve(keyring,
1318				keyring->datalen - KEYQUOTA_LINK_BYTES);
1319		}
1320		assoc_array_cancel_edit(edit);
1321	}
1322	up_write(&keyring->sem);
1323}
1324
1325/*
1326 * Check addition of keys to restricted keyrings.
1327 */
1328static int __key_link_check_restriction(struct key *keyring, struct key *key)
1329{
1330	if (!keyring->restrict_link || !keyring->restrict_link->check)
1331		return 0;
1332	return keyring->restrict_link->check(keyring, key->type, &key->payload,
1333					     keyring->restrict_link->key);
1334}
1335
1336/**
1337 * key_link - Link a key to a keyring
1338 * @keyring: The keyring to make the link in.
1339 * @key: The key to link to.
1340 *
1341 * Make a link in a keyring to a key, such that the keyring holds a reference
1342 * on that key and the key can potentially be found by searching that keyring.
1343 *
1344 * This function will write-lock the keyring's semaphore and will consume some
1345 * of the user's key data quota to hold the link.
1346 *
1347 * Returns 0 if successful, -ENOTDIR if the keyring isn't a keyring,
1348 * -EKEYREVOKED if the keyring has been revoked, -ENFILE if the keyring is
1349 * full, -EDQUOT if there is insufficient key data quota remaining to add
1350 * another link or -ENOMEM if there's insufficient memory.
1351 *
1352 * It is assumed that the caller has checked that it is permitted for a link to
1353 * be made (the keyring should have Write permission and the key Link
1354 * permission).
1355 */
1356int key_link(struct key *keyring, struct key *key)
1357{
1358	struct assoc_array_edit *edit;
1359	int ret;
1360
1361	kenter("{%d,%d}", keyring->serial, refcount_read(&keyring->usage));
1362
1363	key_check(keyring);
1364	key_check(key);
1365
1366	ret = __key_link_begin(keyring, &key->index_key, &edit);
1367	if (ret == 0) {
1368		kdebug("begun {%d,%d}", keyring->serial, refcount_read(&keyring->usage));
1369		ret = __key_link_check_restriction(keyring, key);
1370		if (ret == 0)
1371			ret = __key_link_check_live_key(keyring, key);
1372		if (ret == 0)
1373			__key_link(key, &edit);
1374		__key_link_end(keyring, &key->index_key, edit);
1375	}
1376
1377	kleave(" = %d {%d,%d}", ret, keyring->serial, refcount_read(&keyring->usage));
1378	return ret;
1379}
1380EXPORT_SYMBOL(key_link);
1381
1382/**
1383 * key_unlink - Unlink the first link to a key from a keyring.
1384 * @keyring: The keyring to remove the link from.
1385 * @key: The key the link is to.
1386 *
1387 * Remove a link from a keyring to a key.
1388 *
1389 * This function will write-lock the keyring's semaphore.
1390 *
1391 * Returns 0 if successful, -ENOTDIR if the keyring isn't a keyring, -ENOENT if
1392 * the key isn't linked to by the keyring or -ENOMEM if there's insufficient
1393 * memory.
1394 *
1395 * It is assumed that the caller has checked that it is permitted for a link to
1396 * be removed (the keyring should have Write permission; no permissions are
1397 * required on the key).
1398 */
1399int key_unlink(struct key *keyring, struct key *key)
1400{
1401	struct assoc_array_edit *edit;
1402	int ret;
1403
1404	key_check(keyring);
1405	key_check(key);
1406
 
1407	if (keyring->type != &key_type_keyring)
1408		return -ENOTDIR;
1409
1410	down_write(&keyring->sem);
1411
1412	edit = assoc_array_delete(&keyring->keys, &keyring_assoc_array_ops,
1413				  &key->index_key);
1414	if (IS_ERR(edit)) {
1415		ret = PTR_ERR(edit);
1416		goto error;
 
1417	}
 
 
1418	ret = -ENOENT;
1419	if (edit == NULL)
1420		goto error;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1421
1422	assoc_array_apply_edit(edit);
1423	key_payload_reserve(keyring, keyring->datalen - KEYQUOTA_LINK_BYTES);
1424	ret = 0;
1425
1426error:
 
 
 
1427	up_write(&keyring->sem);
1428	return ret;
1429}
1430EXPORT_SYMBOL(key_unlink);
1431
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1432/**
1433 * keyring_clear - Clear a keyring
1434 * @keyring: The keyring to clear.
1435 *
1436 * Clear the contents of the specified keyring.
1437 *
1438 * Returns 0 if successful or -ENOTDIR if the keyring isn't a keyring.
1439 */
1440int keyring_clear(struct key *keyring)
1441{
1442	struct assoc_array_edit *edit;
1443	int ret;
1444
1445	if (keyring->type != &key_type_keyring)
1446		return -ENOTDIR;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1447
1448	down_write(&keyring->sem);
 
 
1449
1450	edit = assoc_array_clear(&keyring->keys, &keyring_assoc_array_ops);
1451	if (IS_ERR(edit)) {
1452		ret = PTR_ERR(edit);
1453	} else {
1454		if (edit)
1455			assoc_array_apply_edit(edit);
1456		key_payload_reserve(keyring, 0);
1457		ret = 0;
1458	}
1459
1460	up_write(&keyring->sem);
1461	return ret;
1462}
1463EXPORT_SYMBOL(keyring_clear);
1464
1465/*
1466 * Dispose of the links from a revoked keyring.
1467 *
1468 * This is called with the key sem write-locked.
1469 */
1470static void keyring_revoke(struct key *keyring)
1471{
1472	struct assoc_array_edit *edit;
1473
1474	edit = assoc_array_clear(&keyring->keys, &keyring_assoc_array_ops);
1475	if (!IS_ERR(edit)) {
1476		if (edit)
1477			assoc_array_apply_edit(edit);
1478		key_payload_reserve(keyring, 0);
1479	}
1480}
1481
1482static bool keyring_gc_select_iterator(void *object, void *iterator_data)
1483{
1484	struct key *key = keyring_ptr_to_key(object);
1485	time64_t *limit = iterator_data;
1486
1487	if (key_is_dead(key, *limit))
1488		return false;
1489	key_get(key);
1490	return true;
1491}
1492
1493static int keyring_gc_check_iterator(const void *object, void *iterator_data)
 
 
 
1494{
1495	const struct key *key = keyring_ptr_to_key(object);
1496	time64_t *limit = iterator_data;
1497
1498	key_check(key);
1499	return key_is_dead(key, *limit);
1500}
1501
1502/*
1503 * Garbage collect pointers from a keyring.
 
1504 *
1505 * Not called with any locks held.  The keyring's key struct will not be
1506 * deallocated under us as only our caller may deallocate it.
 
1507 */
1508void keyring_gc(struct key *keyring, time64_t limit)
1509{
1510	int result;
1511
1512	kenter("%x{%s}", keyring->serial, keyring->description ?: "");
1513
1514	if (keyring->flags & ((1 << KEY_FLAG_INVALIDATED) |
1515			      (1 << KEY_FLAG_REVOKED)))
1516		goto dont_gc;
1517
1518	/* scan the keyring looking for dead keys */
1519	rcu_read_lock();
1520	result = assoc_array_iterate(&keyring->keys,
1521				     keyring_gc_check_iterator, &limit);
1522	rcu_read_unlock();
1523	if (result == true)
1524		goto do_gc;
1525
1526dont_gc:
1527	kleave(" [no gc]");
1528	return;
1529
1530do_gc:
1531	down_write(&keyring->sem);
1532	assoc_array_gc(&keyring->keys, &keyring_assoc_array_ops,
1533		       keyring_gc_select_iterator, &limit);
1534	up_write(&keyring->sem);
1535	kleave(" [gc]");
1536}
1537
1538/*
1539 * Garbage collect restriction pointers from a keyring.
1540 *
1541 * Keyring restrictions are associated with a key type, and must be cleaned
1542 * up if the key type is unregistered. The restriction is altered to always
1543 * reject additional keys so a keyring cannot be opened up by unregistering
1544 * a key type.
1545 *
1546 * Not called with any keyring locks held. The keyring's key struct will not
1547 * be deallocated under us as only our caller may deallocate it.
1548 *
1549 * The caller is required to hold key_types_sem and dead_type->sem. This is
1550 * fulfilled by key_gc_keytype() holding the locks on behalf of
1551 * key_garbage_collector(), which it invokes on a workqueue.
1552 */
1553void keyring_restriction_gc(struct key *keyring, struct key_type *dead_type)
1554{
1555	struct key_restriction *keyres;
 
 
 
 
1556
1557	kenter("%x{%s}", keyring->serial, keyring->description ?: "");
 
 
 
 
 
 
 
 
 
 
 
 
1558
1559	/*
1560	 * keyring->restrict_link is only assigned at key allocation time
1561	 * or with the key type locked, so the only values that could be
1562	 * concurrently assigned to keyring->restrict_link are for key
1563	 * types other than dead_type. Given this, it's ok to check
1564	 * the key type before acquiring keyring->sem.
1565	 */
1566	if (!dead_type || !keyring->restrict_link ||
1567	    keyring->restrict_link->keytype != dead_type) {
1568		kleave(" [no restriction gc]");
1569		return;
1570	}
1571
1572	/* Lock the keyring to ensure that a link is not in progress */
1573	down_write(&keyring->sem);
1574
1575	keyres = keyring->restrict_link;
 
 
1576
1577	keyres->check = restrict_link_reject;
 
 
 
 
 
1578
1579	key_put(keyres->key);
1580	keyres->key = NULL;
1581	keyres->keytype = NULL;
 
1582
 
1583	up_write(&keyring->sem);
 
 
1584
1585	kleave(" [restriction gc]");
 
 
1586}