1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* Basic authentication token and access key management 3 * 4 * Copyright (C) 2004-2008 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8 #include <linux/export.h> 9 #include <linux/init.h> 10 #include <linux/poison.h> 11 #include <linux/sched.h> 12 #include <linux/slab.h> 13 #include <linux/security.h> 14 #include <linux/workqueue.h> 15 #include <linux/random.h> 16 #include <linux/err.h> 17 #include "internal.h" 18 19 struct kmem_cache *key_jar; 20 struct rb_root key_serial_tree; /* tree of keys indexed by serial */ 21 DEFINE_SPINLOCK(key_serial_lock); 22 23 struct rb_root key_user_tree; /* tree of quota records indexed by UID */ 24 DEFINE_SPINLOCK(key_user_lock); 25 26 unsigned int key_quota_root_maxkeys = 1000000; /* root's key count quota */ 27 unsigned int key_quota_root_maxbytes = 25000000; /* root's key space quota */ 28 unsigned int key_quota_maxkeys = 200; /* general key count quota */ 29 unsigned int key_quota_maxbytes = 20000; /* general key space quota */ 30 31 static LIST_HEAD(key_types_list); 32 static DECLARE_RWSEM(key_types_sem); 33 34 /* We serialise key instantiation and link */ 35 DEFINE_MUTEX(key_construction_mutex); 36 37 #ifdef KEY_DEBUGGING 38 void __key_check(const struct key *key) 39 { 40 printk("__key_check: key %p {%08x} should be {%08x}\n", 41 key, key->magic, KEY_DEBUG_MAGIC); 42 BUG(); 43 } 44 #endif 45 46 /* 47 * Get the key quota record for a user, allocating a new record if one doesn't 48 * already exist. 49 */ 50 struct key_user *key_user_lookup(kuid_t uid) 51 { 52 struct key_user *candidate = NULL, *user; 53 struct rb_node *parent, **p; 54 55 try_again: 56 parent = NULL; 57 p = &key_user_tree.rb_node; 58 spin_lock(&key_user_lock); 59 60 /* search the tree for a user record with a matching UID */ 61 while (*p) { 62 parent = *p; 63 user = rb_entry(parent, struct key_user, node); 64 65 if (uid_lt(uid, user->uid)) 66 p = &(*p)->rb_left; 67 else if (uid_gt(uid, user->uid)) 68 p = &(*p)->rb_right; 69 else 70 goto found; 71 } 72 73 /* if we get here, we failed to find a match in the tree */ 74 if (!candidate) { 75 /* allocate a candidate user record if we don't already have 76 * one */ 77 spin_unlock(&key_user_lock); 78 79 user = NULL; 80 candidate = kmalloc_obj(struct key_user); 81 if (unlikely(!candidate)) 82 goto out; 83 84 /* the allocation may have scheduled, so we need to repeat the 85 * search lest someone else added the record whilst we were 86 * asleep */ 87 goto try_again; 88 } 89 90 /* if we get here, then the user record still hadn't appeared on the 91 * second pass - so we use the candidate record */ 92 refcount_set(&candidate->usage, 1); 93 atomic_set(&candidate->nkeys, 0); 94 atomic_set(&candidate->nikeys, 0); 95 candidate->uid = uid; 96 candidate->qnkeys = 0; 97 candidate->qnbytes = 0; 98 spin_lock_init(&candidate->lock); 99 mutex_init(&candidate->cons_lock); 100 101 rb_link_node(&candidate->node, parent, p); 102 rb_insert_color(&candidate->node, &key_user_tree); 103 spin_unlock(&key_user_lock); 104 user = candidate; 105 goto out; 106 107 /* okay - we found a user record for this UID */ 108 found: 109 refcount_inc(&user->usage); 110 spin_unlock(&key_user_lock); 111 kfree(candidate); 112 out: 113 return user; 114 } 115 116 /* 117 * Dispose of a user structure 118 */ 119 void key_user_put(struct key_user *user) 120 { 121 if (refcount_dec_and_lock(&user->usage, &key_user_lock)) { 122 rb_erase(&user->node, &key_user_tree); 123 spin_unlock(&key_user_lock); 124 125 kfree(user); 126 } 127 } 128 129 /* 130 * Allocate a serial number for a key. These are assigned randomly to avoid 131 * security issues through covert channel problems. 132 */ 133 static inline void key_alloc_serial(struct key *key) 134 { 135 struct rb_node *parent, **p; 136 struct key *xkey; 137 138 /* propose a random serial number and look for a hole for it in the 139 * serial number tree */ 140 do { 141 get_random_bytes(&key->serial, sizeof(key->serial)); 142 143 key->serial >>= 1; /* negative numbers are not permitted */ 144 } while (key->serial < 3); 145 146 spin_lock(&key_serial_lock); 147 148 attempt_insertion: 149 parent = NULL; 150 p = &key_serial_tree.rb_node; 151 152 while (*p) { 153 parent = *p; 154 xkey = rb_entry(parent, struct key, serial_node); 155 156 if (key->serial < xkey->serial) 157 p = &(*p)->rb_left; 158 else if (key->serial > xkey->serial) 159 p = &(*p)->rb_right; 160 else 161 goto serial_exists; 162 } 163 164 /* we've found a suitable hole - arrange for this key to occupy it */ 165 rb_link_node(&key->serial_node, parent, p); 166 rb_insert_color(&key->serial_node, &key_serial_tree); 167 168 spin_unlock(&key_serial_lock); 169 return; 170 171 /* we found a key with the proposed serial number - walk the tree from 172 * that point looking for the next unused serial number */ 173 serial_exists: 174 for (;;) { 175 key->serial++; 176 if (key->serial < 3) { 177 key->serial = 3; 178 goto attempt_insertion; 179 } 180 181 parent = rb_next(parent); 182 if (!parent) 183 goto attempt_insertion; 184 185 xkey = rb_entry(parent, struct key, serial_node); 186 if (key->serial < xkey->serial) 187 goto attempt_insertion; 188 } 189 } 190 191 /** 192 * key_alloc - Allocate a key of the specified type. 193 * @type: The type of key to allocate. 194 * @desc: The key description to allow the key to be searched out. 195 * @uid: The owner of the new key. 196 * @gid: The group ID for the new key's group permissions. 197 * @cred: The credentials specifying UID namespace. 198 * @perm: The permissions mask of the new key. 199 * @flags: Flags specifying quota properties. 200 * @restrict_link: Optional link restriction for new keyrings. 201 * 202 * Allocate a key of the specified type with the attributes given. The key is 203 * returned in an uninstantiated state and the caller needs to instantiate the 204 * key before returning. 205 * 206 * The restrict_link structure (if not NULL) will be freed when the 207 * keyring is destroyed, so it must be dynamically allocated. 208 * 209 * The user's key count quota is updated to reflect the creation of the key and 210 * the user's key data quota has the default for the key type reserved. The 211 * instantiation function should amend this as necessary. If insufficient 212 * quota is available, -EDQUOT will be returned. 213 * 214 * The LSM security modules can prevent a key being created, in which case 215 * -EACCES will be returned. 216 * 217 * Returns a pointer to the new key if successful and an error code otherwise. 218 * 219 * Note that the caller needs to ensure the key type isn't uninstantiated. 220 * Internally this can be done by locking key_types_sem. Externally, this can 221 * be done by either never unregistering the key type, or making sure 222 * key_alloc() calls don't race with module unloading. 223 */ 224 struct key *key_alloc(struct key_type *type, const char *desc, 225 kuid_t uid, kgid_t gid, const struct cred *cred, 226 key_perm_t perm, unsigned long flags, 227 struct key_restriction *restrict_link) 228 { 229 struct key_user *user = NULL; 230 struct key *key; 231 size_t desclen, quotalen; 232 int ret; 233 unsigned long irqflags; 234 235 key = ERR_PTR(-EINVAL); 236 if (!desc || !*desc) 237 goto error; 238 239 if (type->vet_description) { 240 ret = type->vet_description(desc); 241 if (ret < 0) { 242 key = ERR_PTR(ret); 243 goto error; 244 } 245 } 246 247 desclen = strlen(desc); 248 quotalen = desclen + 1 + type->def_datalen; 249 250 /* get hold of the key tracking for this user */ 251 user = key_user_lookup(uid); 252 if (!user) 253 goto no_memory_1; 254 255 /* check that the user's quota permits allocation of another key and 256 * its description */ 257 if (!(flags & KEY_ALLOC_NOT_IN_QUOTA)) { 258 unsigned maxkeys = uid_eq(uid, GLOBAL_ROOT_UID) ? 259 key_quota_root_maxkeys : key_quota_maxkeys; 260 unsigned maxbytes = uid_eq(uid, GLOBAL_ROOT_UID) ? 261 key_quota_root_maxbytes : key_quota_maxbytes; 262 263 spin_lock_irqsave(&user->lock, irqflags); 264 if (!(flags & KEY_ALLOC_QUOTA_OVERRUN)) { 265 if (user->qnkeys + 1 > maxkeys || 266 user->qnbytes + quotalen > maxbytes || 267 user->qnbytes + quotalen < user->qnbytes) 268 goto no_quota; 269 } 270 271 user->qnkeys++; 272 user->qnbytes += quotalen; 273 spin_unlock_irqrestore(&user->lock, irqflags); 274 } 275 276 /* allocate and initialise the key and its description */ 277 key = kmem_cache_zalloc(key_jar, GFP_KERNEL); 278 if (!key) 279 goto no_memory_2; 280 281 key->index_key.desc_len = desclen; 282 key->index_key.description = kmemdup(desc, desclen + 1, GFP_KERNEL); 283 if (!key->index_key.description) 284 goto no_memory_3; 285 key->index_key.type = type; 286 key_set_index_key(&key->index_key); 287 288 refcount_set(&key->usage, 1); 289 init_rwsem(&key->sem); 290 lockdep_set_class(&key->sem, &type->lock_class); 291 key->user = user; 292 key->quotalen = quotalen; 293 key->datalen = type->def_datalen; 294 key->uid = uid; 295 key->gid = gid; 296 key->perm = perm; 297 key->expiry = TIME64_MAX; 298 key->restrict_link = restrict_link; 299 key->last_used_at = ktime_get_real_seconds(); 300 301 key->flags |= 1 << KEY_FLAG_USER_ALIVE; 302 if (!(flags & KEY_ALLOC_NOT_IN_QUOTA)) 303 key->flags |= 1 << KEY_FLAG_IN_QUOTA; 304 if (flags & KEY_ALLOC_BUILT_IN) 305 key->flags |= 1 << KEY_FLAG_BUILTIN; 306 if (flags & KEY_ALLOC_UID_KEYRING) 307 key->flags |= 1 << KEY_FLAG_UID_KEYRING; 308 if (flags & KEY_ALLOC_SET_KEEP) 309 key->flags |= 1 << KEY_FLAG_KEEP; 310 311 #ifdef KEY_DEBUGGING 312 key->magic = KEY_DEBUG_MAGIC; 313 #endif 314 315 /* let the security module know about the key */ 316 ret = security_key_alloc(key, cred, flags); 317 if (ret < 0) 318 goto security_error; 319 320 /* publish the key by giving it a serial number */ 321 refcount_inc(&key->domain_tag->usage); 322 atomic_inc(&user->nkeys); 323 key_alloc_serial(key); 324 325 error: 326 return key; 327 328 security_error: 329 kfree(key->description); 330 kmem_cache_free(key_jar, key); 331 if (!(flags & KEY_ALLOC_NOT_IN_QUOTA)) { 332 spin_lock_irqsave(&user->lock, irqflags); 333 user->qnkeys--; 334 user->qnbytes -= quotalen; 335 spin_unlock_irqrestore(&user->lock, irqflags); 336 } 337 key_user_put(user); 338 key = ERR_PTR(ret); 339 goto error; 340 341 no_memory_3: 342 kmem_cache_free(key_jar, key); 343 no_memory_2: 344 if (!(flags & KEY_ALLOC_NOT_IN_QUOTA)) { 345 spin_lock_irqsave(&user->lock, irqflags); 346 user->qnkeys--; 347 user->qnbytes -= quotalen; 348 spin_unlock_irqrestore(&user->lock, irqflags); 349 } 350 key_user_put(user); 351 no_memory_1: 352 key = ERR_PTR(-ENOMEM); 353 goto error; 354 355 no_quota: 356 spin_unlock_irqrestore(&user->lock, irqflags); 357 key_user_put(user); 358 key = ERR_PTR(-EDQUOT); 359 goto error; 360 } 361 EXPORT_SYMBOL(key_alloc); 362 363 /** 364 * key_payload_reserve - Adjust data quota reservation for the key's payload 365 * @key: The key to make the reservation for. 366 * @datalen: The amount of data payload the caller now wants. 367 * 368 * Adjust the amount of the owning user's key data quota that a key reserves. 369 * If the amount is increased, then -EDQUOT may be returned if there isn't 370 * enough free quota available. 371 * 372 * If successful, 0 is returned. 373 */ 374 int key_payload_reserve(struct key *key, size_t datalen) 375 { 376 int delta = (int)datalen - key->datalen; 377 int ret = 0; 378 379 key_check(key); 380 381 /* contemplate the quota adjustment */ 382 if (delta != 0 && test_bit(KEY_FLAG_IN_QUOTA, &key->flags)) { 383 unsigned maxbytes = uid_eq(key->user->uid, GLOBAL_ROOT_UID) ? 384 key_quota_root_maxbytes : key_quota_maxbytes; 385 unsigned long flags; 386 387 spin_lock_irqsave(&key->user->lock, flags); 388 389 if (delta > 0 && 390 (key->user->qnbytes + delta > maxbytes || 391 key->user->qnbytes + delta < key->user->qnbytes)) { 392 ret = -EDQUOT; 393 } 394 else { 395 key->user->qnbytes += delta; 396 key->quotalen += delta; 397 } 398 spin_unlock_irqrestore(&key->user->lock, flags); 399 } 400 401 /* change the recorded data length if that didn't generate an error */ 402 if (ret == 0) 403 key->datalen = datalen; 404 405 return ret; 406 } 407 EXPORT_SYMBOL(key_payload_reserve); 408 409 /* 410 * Change the key state to being instantiated. 411 */ 412 static void mark_key_instantiated(struct key *key, int reject_error) 413 { 414 /* Commit the payload before setting the state; barrier versus 415 * key_read_state(). 416 */ 417 smp_store_release(&key->state, 418 (reject_error < 0) ? reject_error : KEY_IS_POSITIVE); 419 } 420 421 /* 422 * Instantiate a key and link it into the target keyring atomically. Must be 423 * called with the target keyring's semaphore writelocked. The target key's 424 * semaphore need not be locked as instantiation is serialised by 425 * key_construction_mutex. 426 */ 427 static int __key_instantiate_and_link(struct key *key, 428 struct key_preparsed_payload *prep, 429 struct key *keyring, 430 struct key *authkey, 431 struct assoc_array_edit **_edit) 432 { 433 int ret, awaken; 434 435 key_check(key); 436 key_check(keyring); 437 438 awaken = 0; 439 ret = -EBUSY; 440 441 mutex_lock(&key_construction_mutex); 442 443 /* can't instantiate twice */ 444 if (key->state == KEY_IS_UNINSTANTIATED) { 445 /* instantiate the key */ 446 ret = key->type->instantiate(key, prep); 447 448 if (ret == 0) { 449 /* mark the key as being instantiated */ 450 atomic_inc(&key->user->nikeys); 451 mark_key_instantiated(key, 0); 452 notify_key(key, NOTIFY_KEY_INSTANTIATED, 0); 453 454 if (test_and_clear_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags)) 455 awaken = 1; 456 457 /* and link it into the destination keyring */ 458 if (keyring) { 459 if (test_bit(KEY_FLAG_KEEP, &keyring->flags)) 460 set_bit(KEY_FLAG_KEEP, &key->flags); 461 462 __key_link(keyring, key, _edit); 463 } 464 465 /* disable the authorisation key */ 466 if (authkey) 467 key_invalidate(authkey); 468 469 if (prep->expiry != TIME64_MAX) 470 key_set_expiry(key, prep->expiry); 471 } 472 } 473 474 mutex_unlock(&key_construction_mutex); 475 476 /* wake up anyone waiting for a key to be constructed */ 477 if (awaken) 478 wake_up_bit(&key->flags, KEY_FLAG_USER_CONSTRUCT); 479 480 return ret; 481 } 482 483 /** 484 * key_instantiate_and_link - Instantiate a key and link it into the keyring. 485 * @key: The key to instantiate. 486 * @data: The data to use to instantiate the keyring. 487 * @datalen: The length of @data. 488 * @keyring: Keyring to create a link in on success (or NULL). 489 * @authkey: The authorisation token permitting instantiation. 490 * 491 * Instantiate a key that's in the uninstantiated state using the provided data 492 * and, if successful, link it in to the destination keyring if one is 493 * supplied. 494 * 495 * If successful, 0 is returned, the authorisation token is revoked and anyone 496 * waiting for the key is woken up. If the key was already instantiated, 497 * -EBUSY will be returned. 498 */ 499 int key_instantiate_and_link(struct key *key, 500 const void *data, 501 size_t datalen, 502 struct key *keyring, 503 struct key *authkey) 504 { 505 struct key_preparsed_payload prep; 506 struct assoc_array_edit *edit = NULL; 507 int ret; 508 509 memset(&prep, 0, sizeof(prep)); 510 prep.orig_description = key->description; 511 prep.data = data; 512 prep.datalen = datalen; 513 prep.quotalen = key->type->def_datalen; 514 prep.expiry = TIME64_MAX; 515 if (key->type->preparse) { 516 ret = key->type->preparse(&prep); 517 if (ret < 0) 518 goto error; 519 } 520 521 if (keyring) { 522 ret = __key_link_lock(keyring, &key->index_key); 523 if (ret < 0) 524 goto error; 525 526 ret = __key_link_begin(keyring, &key->index_key, &edit); 527 if (ret < 0) 528 goto error_link_end; 529 530 if (keyring->restrict_link && keyring->restrict_link->check) { 531 struct key_restriction *keyres = keyring->restrict_link; 532 533 ret = keyres->check(keyring, key->type, &prep.payload, 534 keyres->key); 535 if (ret < 0) 536 goto error_link_end; 537 } 538 } 539 540 ret = __key_instantiate_and_link(key, &prep, keyring, authkey, &edit); 541 542 error_link_end: 543 if (keyring) 544 __key_link_end(keyring, &key->index_key, edit); 545 546 error: 547 if (key->type->preparse) 548 key->type->free_preparse(&prep); 549 return ret; 550 } 551 552 EXPORT_SYMBOL(key_instantiate_and_link); 553 554 /** 555 * key_reject_and_link - Negatively instantiate a key and link it into the keyring. 556 * @key: The key to instantiate. 557 * @timeout: The timeout on the negative key. 558 * @error: The error to return when the key is hit. 559 * @keyring: Keyring to create a link in on success (or NULL). 560 * @authkey: The authorisation token permitting instantiation. 561 * 562 * Negatively instantiate a key that's in the uninstantiated state and, if 563 * successful, set its timeout and stored error and link it in to the 564 * destination keyring if one is supplied. The key and any links to the key 565 * will be automatically garbage collected after the timeout expires. 566 * 567 * Negative keys are used to rate limit repeated request_key() calls by causing 568 * them to return the stored error code (typically ENOKEY) until the negative 569 * key expires. 570 * 571 * If successful, 0 is returned, the authorisation token is revoked and anyone 572 * waiting for the key is woken up. If the key was already instantiated, 573 * -EBUSY will be returned. 574 */ 575 int key_reject_and_link(struct key *key, 576 unsigned timeout, 577 unsigned error, 578 struct key *keyring, 579 struct key *authkey) 580 { 581 struct assoc_array_edit *edit = NULL; 582 int ret, awaken, link_ret = 0; 583 584 key_check(key); 585 key_check(keyring); 586 587 awaken = 0; 588 ret = -EBUSY; 589 590 if (keyring) { 591 link_ret = __key_link_lock(keyring, &key->index_key); 592 if (link_ret == 0) { 593 /* 594 * Check the restriction under the keyring semaphore. 595 * keyring_restrict() installs it while holding the 596 * semaphore, so testing it beforehand races with a 597 * concurrent restriction install. 598 */ 599 if (keyring->restrict_link) { 600 __key_link_end(keyring, &key->index_key, edit); 601 return -EPERM; 602 } 603 link_ret = __key_link_begin(keyring, &key->index_key, &edit); 604 if (link_ret < 0) 605 __key_link_end(keyring, &key->index_key, edit); 606 } 607 } 608 609 mutex_lock(&key_construction_mutex); 610 611 /* can't instantiate twice */ 612 if (key->state == KEY_IS_UNINSTANTIATED) { 613 /* mark the key as being negatively instantiated */ 614 atomic_inc(&key->user->nikeys); 615 mark_key_instantiated(key, -error); 616 notify_key(key, NOTIFY_KEY_INSTANTIATED, -error); 617 key_set_expiry(key, ktime_get_real_seconds() + timeout); 618 619 if (test_and_clear_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags)) 620 awaken = 1; 621 622 ret = 0; 623 624 /* and link it into the destination keyring */ 625 if (keyring && link_ret == 0) 626 __key_link(keyring, key, &edit); 627 628 /* disable the authorisation key */ 629 if (authkey) 630 key_invalidate(authkey); 631 } 632 633 mutex_unlock(&key_construction_mutex); 634 635 if (keyring && link_ret == 0) 636 __key_link_end(keyring, &key->index_key, edit); 637 638 /* wake up anyone waiting for a key to be constructed */ 639 if (awaken) 640 wake_up_bit(&key->flags, KEY_FLAG_USER_CONSTRUCT); 641 642 return ret == 0 ? link_ret : ret; 643 } 644 EXPORT_SYMBOL(key_reject_and_link); 645 646 /** 647 * key_put - Discard a reference to a key. 648 * @key: The key to discard a reference from. 649 * 650 * Discard a reference to a key, and when all the references are gone, we 651 * schedule the cleanup task to come and pull it out of the tree in process 652 * context at some later time. 653 */ 654 void key_put(struct key *key) 655 { 656 if (key) { 657 key_check(key); 658 659 if (refcount_dec_and_test(&key->usage)) { 660 unsigned long flags; 661 662 /* deal with the user's key tracking and quota */ 663 if (test_bit(KEY_FLAG_IN_QUOTA, &key->flags)) { 664 spin_lock_irqsave(&key->user->lock, flags); 665 key->user->qnkeys--; 666 key->user->qnbytes -= key->quotalen; 667 spin_unlock_irqrestore(&key->user->lock, flags); 668 } 669 /* Mark key as safe for GC after key->user done. */ 670 clear_bit_unlock(KEY_FLAG_USER_ALIVE, &key->flags); 671 schedule_work(&key_gc_work); 672 } 673 } 674 } 675 EXPORT_SYMBOL(key_put); 676 677 /* 678 * Find a key by its serial number. 679 */ 680 struct key *key_lookup(key_serial_t id) 681 { 682 struct rb_node *n; 683 struct key *key; 684 685 spin_lock(&key_serial_lock); 686 687 /* search the tree for the specified key */ 688 n = key_serial_tree.rb_node; 689 while (n) { 690 key = rb_entry(n, struct key, serial_node); 691 692 if (id < key->serial) 693 n = n->rb_left; 694 else if (id > key->serial) 695 n = n->rb_right; 696 else 697 goto found; 698 } 699 700 not_found: 701 key = ERR_PTR(-ENOKEY); 702 goto error; 703 704 found: 705 /* A key is allowed to be looked up only if someone still owns a 706 * reference to it - otherwise it's awaiting the gc. 707 */ 708 if (!refcount_inc_not_zero(&key->usage)) 709 goto not_found; 710 711 error: 712 spin_unlock(&key_serial_lock); 713 return key; 714 } 715 EXPORT_SYMBOL(key_lookup); 716 717 /* 718 * Find and lock the specified key type against removal. 719 * 720 * We return with the sem read-locked if successful. If the type wasn't 721 * available -ENOKEY is returned instead. 722 */ 723 struct key_type *key_type_lookup(const char *type) 724 { 725 struct key_type *ktype; 726 727 down_read(&key_types_sem); 728 729 /* look up the key type to see if it's one of the registered kernel 730 * types */ 731 list_for_each_entry(ktype, &key_types_list, link) { 732 if (strcmp(ktype->name, type) == 0) 733 goto found_kernel_type; 734 } 735 736 up_read(&key_types_sem); 737 ktype = ERR_PTR(-ENOKEY); 738 739 found_kernel_type: 740 return ktype; 741 } 742 743 void key_set_timeout(struct key *key, unsigned timeout) 744 { 745 time64_t expiry = TIME64_MAX; 746 747 /* make the changes with the locks held to prevent races */ 748 down_write(&key->sem); 749 750 if (timeout > 0) 751 expiry = ktime_get_real_seconds() + timeout; 752 key_set_expiry(key, expiry); 753 754 up_write(&key->sem); 755 } 756 EXPORT_SYMBOL_GPL(key_set_timeout); 757 758 /* 759 * Unlock a key type locked by key_type_lookup(). 760 */ 761 void key_type_put(struct key_type *ktype) 762 { 763 up_read(&key_types_sem); 764 } 765 766 /* 767 * Attempt to update an existing key. 768 * 769 * The key is given to us with an incremented refcount that we need to discard 770 * if we get an error. 771 */ 772 static inline key_ref_t __key_update(key_ref_t key_ref, 773 struct key_preparsed_payload *prep) 774 { 775 struct key *key = key_ref_to_ptr(key_ref); 776 int ret; 777 778 /* need write permission on the key to update it */ 779 ret = key_permission(key_ref, KEY_NEED_WRITE); 780 if (ret < 0) 781 goto error; 782 783 ret = -EEXIST; 784 if (!key->type->update) 785 goto error; 786 787 down_write(&key->sem); 788 789 ret = key->type->update(key, prep); 790 if (ret == 0) { 791 /* Updating a negative key positively instantiates it */ 792 mark_key_instantiated(key, 0); 793 notify_key(key, NOTIFY_KEY_UPDATED, 0); 794 } 795 796 up_write(&key->sem); 797 798 if (ret < 0) 799 goto error; 800 out: 801 return key_ref; 802 803 error: 804 key_put(key); 805 key_ref = ERR_PTR(ret); 806 goto out; 807 } 808 809 /* 810 * Create or potentially update a key. The combined logic behind 811 * key_create_or_update() and key_create() 812 */ 813 static key_ref_t __key_create_or_update(key_ref_t keyring_ref, 814 const char *type, 815 const char *description, 816 const void *payload, 817 size_t plen, 818 key_perm_t perm, 819 unsigned long flags, 820 bool allow_update) 821 { 822 struct keyring_index_key index_key = { 823 .description = description, 824 }; 825 struct key_preparsed_payload prep; 826 struct assoc_array_edit *edit = NULL; 827 const struct cred *cred = current_cred(); 828 struct key *keyring, *key = NULL; 829 key_ref_t key_ref; 830 int ret; 831 struct key_restriction *restrict_link = NULL; 832 833 /* look up the key type to see if it's one of the registered kernel 834 * types */ 835 index_key.type = key_type_lookup(type); 836 if (IS_ERR(index_key.type)) { 837 key_ref = ERR_PTR(-ENODEV); 838 goto error; 839 } 840 841 key_ref = ERR_PTR(-EINVAL); 842 if (!index_key.type->instantiate || 843 (!index_key.description && !index_key.type->preparse)) 844 goto error_put_type; 845 846 keyring = key_ref_to_ptr(keyring_ref); 847 848 key_check(keyring); 849 850 key_ref = ERR_PTR(-ENOTDIR); 851 if (keyring->type != &key_type_keyring) 852 goto error_put_type; 853 854 memset(&prep, 0, sizeof(prep)); 855 prep.orig_description = description; 856 prep.data = payload; 857 prep.datalen = plen; 858 prep.quotalen = index_key.type->def_datalen; 859 prep.expiry = TIME64_MAX; 860 if (index_key.type->preparse) { 861 ret = index_key.type->preparse(&prep); 862 if (ret < 0) { 863 key_ref = ERR_PTR(ret); 864 goto error_free_prep; 865 } 866 if (!index_key.description) 867 index_key.description = prep.description; 868 key_ref = ERR_PTR(-EINVAL); 869 if (!index_key.description) 870 goto error_free_prep; 871 } 872 index_key.desc_len = strlen(index_key.description); 873 key_set_index_key(&index_key); 874 875 ret = __key_link_lock(keyring, &index_key); 876 if (ret < 0) { 877 key_ref = ERR_PTR(ret); 878 goto error_free_prep; 879 } 880 881 ret = __key_link_begin(keyring, &index_key, &edit); 882 if (ret < 0) { 883 key_ref = ERR_PTR(ret); 884 goto error_link_end; 885 } 886 887 if (!(flags & KEY_ALLOC_BYPASS_RESTRICTION)) 888 restrict_link = keyring->restrict_link; 889 890 if (restrict_link && restrict_link->check) { 891 ret = restrict_link->check(keyring, index_key.type, 892 &prep.payload, restrict_link->key); 893 if (ret < 0) { 894 key_ref = ERR_PTR(ret); 895 goto error_link_end; 896 } 897 } 898 899 /* if we're going to allocate a new key, we're going to have 900 * to modify the keyring */ 901 ret = key_permission(keyring_ref, KEY_NEED_WRITE); 902 if (ret < 0) { 903 key_ref = ERR_PTR(ret); 904 goto error_link_end; 905 } 906 907 /* if it's requested and possible to update this type of key, search 908 * for an existing key of the same type and description in the 909 * destination keyring and update that instead if possible 910 */ 911 if (allow_update) { 912 if (index_key.type->update) { 913 key_ref = find_key_to_update(keyring_ref, &index_key); 914 if (key_ref) 915 goto found_matching_key; 916 } 917 } else { 918 key_ref = find_key_to_update(keyring_ref, &index_key); 919 if (key_ref) { 920 key_ref_put(key_ref); 921 key_ref = ERR_PTR(-EEXIST); 922 goto error_link_end; 923 } 924 } 925 926 /* if the client doesn't provide, decide on the permissions we want */ 927 if (perm == KEY_PERM_UNDEF) { 928 perm = KEY_POS_VIEW | KEY_POS_SEARCH | KEY_POS_LINK | KEY_POS_SETATTR; 929 perm |= KEY_USR_VIEW; 930 931 if (index_key.type->read) 932 perm |= KEY_POS_READ; 933 934 if (index_key.type == &key_type_keyring || 935 index_key.type->update) 936 perm |= KEY_POS_WRITE; 937 } 938 939 /* allocate a new key */ 940 key = key_alloc(index_key.type, index_key.description, 941 cred->fsuid, cred->fsgid, cred, perm, flags, NULL); 942 if (IS_ERR(key)) { 943 key_ref = ERR_CAST(key); 944 goto error_link_end; 945 } 946 947 /* instantiate it and link it into the target keyring */ 948 ret = __key_instantiate_and_link(key, &prep, keyring, NULL, &edit); 949 if (ret < 0) { 950 key_put(key); 951 key_ref = ERR_PTR(ret); 952 goto error_link_end; 953 } 954 955 security_key_post_create_or_update(keyring, key, payload, plen, flags, 956 true); 957 958 key_ref = make_key_ref(key, is_key_possessed(keyring_ref)); 959 960 error_link_end: 961 __key_link_end(keyring, &index_key, edit); 962 error_free_prep: 963 if (index_key.type->preparse) 964 index_key.type->free_preparse(&prep); 965 error_put_type: 966 key_type_put(index_key.type); 967 error: 968 return key_ref; 969 970 found_matching_key: 971 /* we found a matching key, so we're going to try to update it 972 * - we can drop the locks first as we have the key pinned 973 */ 974 __key_link_end(keyring, &index_key, edit); 975 976 key = key_ref_to_ptr(key_ref); 977 if (test_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags)) { 978 ret = wait_for_key_construction(key, true); 979 if (ret < 0) { 980 key_ref_put(key_ref); 981 key_ref = ERR_PTR(ret); 982 goto error_free_prep; 983 } 984 } 985 986 key_ref = __key_update(key_ref, &prep); 987 988 if (!IS_ERR(key_ref)) 989 security_key_post_create_or_update(keyring, key, payload, plen, 990 flags, false); 991 992 goto error_free_prep; 993 } 994 995 /** 996 * key_create_or_update - Update or create and instantiate a key. 997 * @keyring_ref: A pointer to the destination keyring with possession flag. 998 * @type: The type of key. 999 * @description: The searchable description for the key. 1000 * @payload: The data to use to instantiate or update the key. 1001 * @plen: The length of @payload. 1002 * @perm: The permissions mask for a new key. 1003 * @flags: The quota flags for a new key. 1004 * 1005 * Search the destination keyring for a key of the same description and if one 1006 * is found, update it, otherwise create and instantiate a new one and create a 1007 * link to it from that keyring. 1008 * 1009 * If perm is KEY_PERM_UNDEF then an appropriate key permissions mask will be 1010 * concocted. 1011 * 1012 * Returns a pointer to the new key if successful, -ENODEV if the key type 1013 * wasn't available, -ENOTDIR if the keyring wasn't a keyring, -EACCES if the 1014 * caller isn't permitted to modify the keyring or the LSM did not permit 1015 * creation of the key. 1016 * 1017 * On success, the possession flag from the keyring ref will be tacked on to 1018 * the key ref before it is returned. 1019 */ 1020 key_ref_t key_create_or_update(key_ref_t keyring_ref, 1021 const char *type, 1022 const char *description, 1023 const void *payload, 1024 size_t plen, 1025 key_perm_t perm, 1026 unsigned long flags) 1027 { 1028 return __key_create_or_update(keyring_ref, type, description, payload, 1029 plen, perm, flags, true); 1030 } 1031 EXPORT_SYMBOL(key_create_or_update); 1032 1033 /** 1034 * key_create - Create and instantiate a key. 1035 * @keyring_ref: A pointer to the destination keyring with possession flag. 1036 * @type: The type of key. 1037 * @description: The searchable description for the key. 1038 * @payload: The data to use to instantiate or update the key. 1039 * @plen: The length of @payload. 1040 * @perm: The permissions mask for a new key. 1041 * @flags: The quota flags for a new key. 1042 * 1043 * Create and instantiate a new key and link to it from the destination keyring. 1044 * 1045 * If perm is KEY_PERM_UNDEF then an appropriate key permissions mask will be 1046 * concocted. 1047 * 1048 * Returns a pointer to the new key if successful, -EEXIST if a key with the 1049 * same description already exists, -ENODEV if the key type wasn't available, 1050 * -ENOTDIR if the keyring wasn't a keyring, -EACCES if the caller isn't 1051 * permitted to modify the keyring or the LSM did not permit creation of the 1052 * key. 1053 * 1054 * On success, the possession flag from the keyring ref will be tacked on to 1055 * the key ref before it is returned. 1056 */ 1057 key_ref_t key_create(key_ref_t keyring_ref, 1058 const char *type, 1059 const char *description, 1060 const void *payload, 1061 size_t plen, 1062 key_perm_t perm, 1063 unsigned long flags) 1064 { 1065 return __key_create_or_update(keyring_ref, type, description, payload, 1066 plen, perm, flags, false); 1067 } 1068 EXPORT_SYMBOL(key_create); 1069 1070 /** 1071 * key_update - Update a key's contents. 1072 * @key_ref: The pointer (plus possession flag) to the key. 1073 * @payload: The data to be used to update the key. 1074 * @plen: The length of @payload. 1075 * 1076 * Attempt to update the contents of a key with the given payload data. The 1077 * caller must be granted Write permission on the key. Negative keys can be 1078 * instantiated by this method. 1079 * 1080 * Returns 0 on success, -EACCES if not permitted and -EOPNOTSUPP if the key 1081 * type does not support updating. The key type may return other errors. 1082 */ 1083 int key_update(key_ref_t key_ref, const void *payload, size_t plen) 1084 { 1085 struct key_preparsed_payload prep; 1086 struct key *key = key_ref_to_ptr(key_ref); 1087 int ret; 1088 1089 key_check(key); 1090 1091 /* the key must be writable */ 1092 ret = key_permission(key_ref, KEY_NEED_WRITE); 1093 if (ret < 0) 1094 return ret; 1095 1096 /* attempt to update it if supported */ 1097 if (!key->type->update) 1098 return -EOPNOTSUPP; 1099 1100 memset(&prep, 0, sizeof(prep)); 1101 prep.data = payload; 1102 prep.datalen = plen; 1103 prep.quotalen = key->type->def_datalen; 1104 prep.expiry = TIME64_MAX; 1105 if (key->type->preparse) { 1106 ret = key->type->preparse(&prep); 1107 if (ret < 0) 1108 goto error; 1109 } 1110 1111 down_write(&key->sem); 1112 1113 ret = key->type->update(key, &prep); 1114 if (ret == 0) { 1115 /* Updating a negative key positively instantiates it */ 1116 mark_key_instantiated(key, 0); 1117 notify_key(key, NOTIFY_KEY_UPDATED, 0); 1118 } 1119 1120 up_write(&key->sem); 1121 1122 error: 1123 if (key->type->preparse) 1124 key->type->free_preparse(&prep); 1125 return ret; 1126 } 1127 EXPORT_SYMBOL(key_update); 1128 1129 /** 1130 * key_revoke - Revoke a key. 1131 * @key: The key to be revoked. 1132 * 1133 * Mark a key as being revoked and ask the type to free up its resources. The 1134 * revocation timeout is set and the key and all its links will be 1135 * automatically garbage collected after key_gc_delay amount of time if they 1136 * are not manually dealt with first. 1137 */ 1138 void key_revoke(struct key *key) 1139 { 1140 time64_t time; 1141 1142 key_check(key); 1143 1144 /* make sure no one's trying to change or use the key when we mark it 1145 * - we tell lockdep that we might nest because we might be revoking an 1146 * authorisation key whilst holding the sem on a key we've just 1147 * instantiated 1148 */ 1149 down_write_nested(&key->sem, 1); 1150 if (!test_and_set_bit(KEY_FLAG_REVOKED, &key->flags)) { 1151 notify_key(key, NOTIFY_KEY_REVOKED, 0); 1152 if (key->type->revoke) 1153 key->type->revoke(key); 1154 1155 /* set the death time to no more than the expiry time */ 1156 time = ktime_get_real_seconds(); 1157 if (key->revoked_at == 0 || key->revoked_at > time) { 1158 key->revoked_at = time; 1159 key_schedule_gc(key->revoked_at + key_gc_delay); 1160 } 1161 } 1162 1163 up_write(&key->sem); 1164 } 1165 EXPORT_SYMBOL(key_revoke); 1166 1167 /** 1168 * key_invalidate - Invalidate a key. 1169 * @key: The key to be invalidated. 1170 * 1171 * Mark a key as being invalidated and have it cleaned up immediately. The key 1172 * is ignored by all searches and other operations from this point. 1173 */ 1174 void key_invalidate(struct key *key) 1175 { 1176 kenter("%d", key_serial(key)); 1177 1178 key_check(key); 1179 1180 if (!test_bit(KEY_FLAG_INVALIDATED, &key->flags)) { 1181 down_write_nested(&key->sem, 1); 1182 if (!test_and_set_bit(KEY_FLAG_INVALIDATED, &key->flags)) { 1183 notify_key(key, NOTIFY_KEY_INVALIDATED, 0); 1184 key_schedule_gc_links(); 1185 } 1186 up_write(&key->sem); 1187 } 1188 } 1189 EXPORT_SYMBOL(key_invalidate); 1190 1191 /** 1192 * generic_key_instantiate - Simple instantiation of a key from preparsed data 1193 * @key: The key to be instantiated 1194 * @prep: The preparsed data to load. 1195 * 1196 * Instantiate a key from preparsed data. We assume we can just copy the data 1197 * in directly and clear the old pointers. 1198 * 1199 * This can be pointed to directly by the key type instantiate op pointer. 1200 */ 1201 int generic_key_instantiate(struct key *key, struct key_preparsed_payload *prep) 1202 { 1203 int ret; 1204 1205 pr_devel("==>%s()\n", __func__); 1206 1207 ret = key_payload_reserve(key, prep->quotalen); 1208 if (ret == 0) { 1209 rcu_assign_keypointer(key, prep->payload.data[0]); 1210 key->payload.data[1] = prep->payload.data[1]; 1211 key->payload.data[2] = prep->payload.data[2]; 1212 key->payload.data[3] = prep->payload.data[3]; 1213 prep->payload.data[0] = NULL; 1214 prep->payload.data[1] = NULL; 1215 prep->payload.data[2] = NULL; 1216 prep->payload.data[3] = NULL; 1217 } 1218 pr_devel("<==%s() = %d\n", __func__, ret); 1219 return ret; 1220 } 1221 EXPORT_SYMBOL(generic_key_instantiate); 1222 1223 /** 1224 * register_key_type - Register a type of key. 1225 * @ktype: The new key type. 1226 * 1227 * Register a new key type. 1228 * 1229 * Returns 0 on success or -EEXIST if a type of this name already exists. 1230 */ 1231 int register_key_type(struct key_type *ktype) 1232 { 1233 struct key_type *p; 1234 int ret; 1235 1236 memset(&ktype->lock_class, 0, sizeof(ktype->lock_class)); 1237 1238 ret = -EEXIST; 1239 down_write(&key_types_sem); 1240 1241 /* disallow key types with the same name */ 1242 list_for_each_entry(p, &key_types_list, link) { 1243 if (strcmp(p->name, ktype->name) == 0) 1244 goto out; 1245 } 1246 1247 /* store the type */ 1248 list_add(&ktype->link, &key_types_list); 1249 1250 pr_notice("Key type %s registered\n", ktype->name); 1251 ret = 0; 1252 1253 out: 1254 up_write(&key_types_sem); 1255 return ret; 1256 } 1257 EXPORT_SYMBOL(register_key_type); 1258 1259 /** 1260 * unregister_key_type - Unregister a type of key. 1261 * @ktype: The key type. 1262 * 1263 * Unregister a key type and mark all the extant keys of this type as dead. 1264 * Those keys of this type are then destroyed to get rid of their payloads and 1265 * they and their links will be garbage collected as soon as possible. 1266 */ 1267 void unregister_key_type(struct key_type *ktype) 1268 { 1269 down_write(&key_types_sem); 1270 list_del_init(&ktype->link); 1271 downgrade_write(&key_types_sem); 1272 key_gc_keytype(ktype); 1273 pr_notice("Key type %s unregistered\n", ktype->name); 1274 up_read(&key_types_sem); 1275 } 1276 EXPORT_SYMBOL(unregister_key_type); 1277 1278 /* 1279 * Initialise the key management state. 1280 */ 1281 void __init key_init(void) 1282 { 1283 /* allocate a slab in which we can store keys */ 1284 key_jar = kmem_cache_create("key_jar", sizeof(struct key), 1285 0, SLAB_HWCACHE_ALIGN | SLAB_PANIC | SLAB_NO_MERGE, NULL); 1286 1287 /* add the special key types */ 1288 list_add_tail(&key_type_keyring.link, &key_types_list); 1289 list_add_tail(&key_type_dead.link, &key_types_list); 1290 list_add_tail(&key_type_user.link, &key_types_list); 1291 list_add_tail(&key_type_logon.link, &key_types_list); 1292 1293 /* record the root user tracking */ 1294 rb_link_node(&root_key_user.node, 1295 NULL, 1296 &key_user_tree.rb_node); 1297 1298 rb_insert_color(&root_key_user.node, 1299 &key_user_tree); 1300 } 1301