Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /* Keyring handling
0003  *
0004  * Copyright (C) 2004-2005, 2008, 2013 Red Hat, Inc. All Rights Reserved.
0005  * Written by David Howells (dhowells@redhat.com)
0006  */
0007 
0008 #include <linux/export.h>
0009 #include <linux/init.h>
0010 #include <linux/sched.h>
0011 #include <linux/slab.h>
0012 #include <linux/security.h>
0013 #include <linux/seq_file.h>
0014 #include <linux/err.h>
0015 #include <linux/user_namespace.h>
0016 #include <linux/nsproxy.h>
0017 #include <keys/keyring-type.h>
0018 #include <keys/user-type.h>
0019 #include <linux/assoc_array_priv.h>
0020 #include <linux/uaccess.h>
0021 #include <net/net_namespace.h>
0022 #include "internal.h"
0023 
0024 /*
0025  * When plumbing the depths of the key tree, this sets a hard limit
0026  * set on how deep we're willing to go.
0027  */
0028 #define KEYRING_SEARCH_MAX_DEPTH 6
0029 
0030 /*
0031  * We mark pointers we pass to the associative array with bit 1 set if
0032  * they're keyrings and clear otherwise.
0033  */
0034 #define KEYRING_PTR_SUBTYPE 0x2UL
0035 
0036 static inline bool keyring_ptr_is_keyring(const struct assoc_array_ptr *x)
0037 {
0038     return (unsigned long)x & KEYRING_PTR_SUBTYPE;
0039 }
0040 static inline struct key *keyring_ptr_to_key(const struct assoc_array_ptr *x)
0041 {
0042     void *object = assoc_array_ptr_to_leaf(x);
0043     return (struct key *)((unsigned long)object & ~KEYRING_PTR_SUBTYPE);
0044 }
0045 static inline void *keyring_key_to_ptr(struct key *key)
0046 {
0047     if (key->type == &key_type_keyring)
0048         return (void *)((unsigned long)key | KEYRING_PTR_SUBTYPE);
0049     return key;
0050 }
0051 
0052 static DEFINE_RWLOCK(keyring_name_lock);
0053 
0054 /*
0055  * Clean up the bits of user_namespace that belong to us.
0056  */
0057 void key_free_user_ns(struct user_namespace *ns)
0058 {
0059     write_lock(&keyring_name_lock);
0060     list_del_init(&ns->keyring_name_list);
0061     write_unlock(&keyring_name_lock);
0062 
0063     key_put(ns->user_keyring_register);
0064 #ifdef CONFIG_PERSISTENT_KEYRINGS
0065     key_put(ns->persistent_keyring_register);
0066 #endif
0067 }
0068 
0069 /*
0070  * The keyring key type definition.  Keyrings are simply keys of this type and
0071  * can be treated as ordinary keys in addition to having their own special
0072  * operations.
0073  */
0074 static int keyring_preparse(struct key_preparsed_payload *prep);
0075 static void keyring_free_preparse(struct key_preparsed_payload *prep);
0076 static int keyring_instantiate(struct key *keyring,
0077                    struct key_preparsed_payload *prep);
0078 static void keyring_revoke(struct key *keyring);
0079 static void keyring_destroy(struct key *keyring);
0080 static void keyring_describe(const struct key *keyring, struct seq_file *m);
0081 static long keyring_read(const struct key *keyring,
0082              char __user *buffer, size_t buflen);
0083 
0084 struct key_type key_type_keyring = {
0085     .name       = "keyring",
0086     .def_datalen    = 0,
0087     .preparse   = keyring_preparse,
0088     .free_preparse  = keyring_free_preparse,
0089     .instantiate    = keyring_instantiate,
0090     .revoke     = keyring_revoke,
0091     .destroy    = keyring_destroy,
0092     .describe   = keyring_describe,
0093     .read       = keyring_read,
0094 };
0095 EXPORT_SYMBOL(key_type_keyring);
0096 
0097 /*
0098  * Semaphore to serialise link/link calls to prevent two link calls in parallel
0099  * introducing a cycle.
0100  */
0101 static DEFINE_MUTEX(keyring_serialise_link_lock);
0102 
0103 /*
0104  * Publish the name of a keyring so that it can be found by name (if it has
0105  * one and it doesn't begin with a dot).
0106  */
0107 static void keyring_publish_name(struct key *keyring)
0108 {
0109     struct user_namespace *ns = current_user_ns();
0110 
0111     if (keyring->description &&
0112         keyring->description[0] &&
0113         keyring->description[0] != '.') {
0114         write_lock(&keyring_name_lock);
0115         list_add_tail(&keyring->name_link, &ns->keyring_name_list);
0116         write_unlock(&keyring_name_lock);
0117     }
0118 }
0119 
0120 /*
0121  * Preparse a keyring payload
0122  */
0123 static int keyring_preparse(struct key_preparsed_payload *prep)
0124 {
0125     return prep->datalen != 0 ? -EINVAL : 0;
0126 }
0127 
0128 /*
0129  * Free a preparse of a user defined key payload
0130  */
0131 static void keyring_free_preparse(struct key_preparsed_payload *prep)
0132 {
0133 }
0134 
0135 /*
0136  * Initialise a keyring.
0137  *
0138  * Returns 0 on success, -EINVAL if given any data.
0139  */
0140 static int keyring_instantiate(struct key *keyring,
0141                    struct key_preparsed_payload *prep)
0142 {
0143     assoc_array_init(&keyring->keys);
0144     /* make the keyring available by name if it has one */
0145     keyring_publish_name(keyring);
0146     return 0;
0147 }
0148 
0149 /*
0150  * Multiply 64-bits by 32-bits to 96-bits and fold back to 64-bit.  Ideally we'd
0151  * fold the carry back too, but that requires inline asm.
0152  */
0153 static u64 mult_64x32_and_fold(u64 x, u32 y)
0154 {
0155     u64 hi = (u64)(u32)(x >> 32) * y;
0156     u64 lo = (u64)(u32)(x) * y;
0157     return lo + ((u64)(u32)hi << 32) + (u32)(hi >> 32);
0158 }
0159 
0160 /*
0161  * Hash a key type and description.
0162  */
0163 static void hash_key_type_and_desc(struct keyring_index_key *index_key)
0164 {
0165     const unsigned level_shift = ASSOC_ARRAY_LEVEL_STEP;
0166     const unsigned long fan_mask = ASSOC_ARRAY_FAN_MASK;
0167     const char *description = index_key->description;
0168     unsigned long hash, type;
0169     u32 piece;
0170     u64 acc;
0171     int n, desc_len = index_key->desc_len;
0172 
0173     type = (unsigned long)index_key->type;
0174     acc = mult_64x32_and_fold(type, desc_len + 13);
0175     acc = mult_64x32_and_fold(acc, 9207);
0176     piece = (unsigned long)index_key->domain_tag;
0177     acc = mult_64x32_and_fold(acc, piece);
0178     acc = mult_64x32_and_fold(acc, 9207);
0179 
0180     for (;;) {
0181         n = desc_len;
0182         if (n <= 0)
0183             break;
0184         if (n > 4)
0185             n = 4;
0186         piece = 0;
0187         memcpy(&piece, description, n);
0188         description += n;
0189         desc_len -= n;
0190         acc = mult_64x32_and_fold(acc, piece);
0191         acc = mult_64x32_and_fold(acc, 9207);
0192     }
0193 
0194     /* Fold the hash down to 32 bits if need be. */
0195     hash = acc;
0196     if (ASSOC_ARRAY_KEY_CHUNK_SIZE == 32)
0197         hash ^= acc >> 32;
0198 
0199     /* Squidge all the keyrings into a separate part of the tree to
0200      * ordinary keys by making sure the lowest level segment in the hash is
0201      * zero for keyrings and non-zero otherwise.
0202      */
0203     if (index_key->type != &key_type_keyring && (hash & fan_mask) == 0)
0204         hash |= (hash >> (ASSOC_ARRAY_KEY_CHUNK_SIZE - level_shift)) | 1;
0205     else if (index_key->type == &key_type_keyring && (hash & fan_mask) != 0)
0206         hash = (hash + (hash << level_shift)) & ~fan_mask;
0207     index_key->hash = hash;
0208 }
0209 
0210 /*
0211  * Finalise an index key to include a part of the description actually in the
0212  * index key, to set the domain tag and to calculate the hash.
0213  */
0214 void key_set_index_key(struct keyring_index_key *index_key)
0215 {
0216     static struct key_tag default_domain_tag = { .usage = REFCOUNT_INIT(1), };
0217     size_t n = min_t(size_t, index_key->desc_len, sizeof(index_key->desc));
0218 
0219     memcpy(index_key->desc, index_key->description, n);
0220 
0221     if (!index_key->domain_tag) {
0222         if (index_key->type->flags & KEY_TYPE_NET_DOMAIN)
0223             index_key->domain_tag = current->nsproxy->net_ns->key_domain;
0224         else
0225             index_key->domain_tag = &default_domain_tag;
0226     }
0227 
0228     hash_key_type_and_desc(index_key);
0229 }
0230 
0231 /**
0232  * key_put_tag - Release a ref on a tag.
0233  * @tag: The tag to release.
0234  *
0235  * This releases a reference the given tag and returns true if that ref was the
0236  * last one.
0237  */
0238 bool key_put_tag(struct key_tag *tag)
0239 {
0240     if (refcount_dec_and_test(&tag->usage)) {
0241         kfree_rcu(tag, rcu);
0242         return true;
0243     }
0244 
0245     return false;
0246 }
0247 
0248 /**
0249  * key_remove_domain - Kill off a key domain and gc its keys
0250  * @domain_tag: The domain tag to release.
0251  *
0252  * This marks a domain tag as being dead and releases a ref on it.  If that
0253  * wasn't the last reference, the garbage collector is poked to try and delete
0254  * all keys that were in the domain.
0255  */
0256 void key_remove_domain(struct key_tag *domain_tag)
0257 {
0258     domain_tag->removed = true;
0259     if (!key_put_tag(domain_tag))
0260         key_schedule_gc_links();
0261 }
0262 
0263 /*
0264  * Build the next index key chunk.
0265  *
0266  * We return it one word-sized chunk at a time.
0267  */
0268 static unsigned long keyring_get_key_chunk(const void *data, int level)
0269 {
0270     const struct keyring_index_key *index_key = data;
0271     unsigned long chunk = 0;
0272     const u8 *d;
0273     int desc_len = index_key->desc_len, n = sizeof(chunk);
0274 
0275     level /= ASSOC_ARRAY_KEY_CHUNK_SIZE;
0276     switch (level) {
0277     case 0:
0278         return index_key->hash;
0279     case 1:
0280         return index_key->x;
0281     case 2:
0282         return (unsigned long)index_key->type;
0283     case 3:
0284         return (unsigned long)index_key->domain_tag;
0285     default:
0286         level -= 4;
0287         if (desc_len <= sizeof(index_key->desc))
0288             return 0;
0289 
0290         d = index_key->description + sizeof(index_key->desc);
0291         d += level * sizeof(long);
0292         desc_len -= sizeof(index_key->desc);
0293         if (desc_len > n)
0294             desc_len = n;
0295         do {
0296             chunk <<= 8;
0297             chunk |= *d++;
0298         } while (--desc_len > 0);
0299         return chunk;
0300     }
0301 }
0302 
0303 static unsigned long keyring_get_object_key_chunk(const void *object, int level)
0304 {
0305     const struct key *key = keyring_ptr_to_key(object);
0306     return keyring_get_key_chunk(&key->index_key, level);
0307 }
0308 
0309 static bool keyring_compare_object(const void *object, const void *data)
0310 {
0311     const struct keyring_index_key *index_key = data;
0312     const struct key *key = keyring_ptr_to_key(object);
0313 
0314     return key->index_key.type == index_key->type &&
0315         key->index_key.domain_tag == index_key->domain_tag &&
0316         key->index_key.desc_len == index_key->desc_len &&
0317         memcmp(key->index_key.description, index_key->description,
0318                index_key->desc_len) == 0;
0319 }
0320 
0321 /*
0322  * Compare the index keys of a pair of objects and determine the bit position
0323  * at which they differ - if they differ.
0324  */
0325 static int keyring_diff_objects(const void *object, const void *data)
0326 {
0327     const struct key *key_a = keyring_ptr_to_key(object);
0328     const struct keyring_index_key *a = &key_a->index_key;
0329     const struct keyring_index_key *b = data;
0330     unsigned long seg_a, seg_b;
0331     int level, i;
0332 
0333     level = 0;
0334     seg_a = a->hash;
0335     seg_b = b->hash;
0336     if ((seg_a ^ seg_b) != 0)
0337         goto differ;
0338     level += ASSOC_ARRAY_KEY_CHUNK_SIZE / 8;
0339 
0340     /* The number of bits contributed by the hash is controlled by a
0341      * constant in the assoc_array headers.  Everything else thereafter we
0342      * can deal with as being machine word-size dependent.
0343      */
0344     seg_a = a->x;
0345     seg_b = b->x;
0346     if ((seg_a ^ seg_b) != 0)
0347         goto differ;
0348     level += sizeof(unsigned long);
0349 
0350     /* The next bit may not work on big endian */
0351     seg_a = (unsigned long)a->type;
0352     seg_b = (unsigned long)b->type;
0353     if ((seg_a ^ seg_b) != 0)
0354         goto differ;
0355     level += sizeof(unsigned long);
0356 
0357     seg_a = (unsigned long)a->domain_tag;
0358     seg_b = (unsigned long)b->domain_tag;
0359     if ((seg_a ^ seg_b) != 0)
0360         goto differ;
0361     level += sizeof(unsigned long);
0362 
0363     i = sizeof(a->desc);
0364     if (a->desc_len <= i)
0365         goto same;
0366 
0367     for (; i < a->desc_len; i++) {
0368         seg_a = *(unsigned char *)(a->description + i);
0369         seg_b = *(unsigned char *)(b->description + i);
0370         if ((seg_a ^ seg_b) != 0)
0371             goto differ_plus_i;
0372     }
0373 
0374 same:
0375     return -1;
0376 
0377 differ_plus_i:
0378     level += i;
0379 differ:
0380     i = level * 8 + __ffs(seg_a ^ seg_b);
0381     return i;
0382 }
0383 
0384 /*
0385  * Free an object after stripping the keyring flag off of the pointer.
0386  */
0387 static void keyring_free_object(void *object)
0388 {
0389     key_put(keyring_ptr_to_key(object));
0390 }
0391 
0392 /*
0393  * Operations for keyring management by the index-tree routines.
0394  */
0395 static const struct assoc_array_ops keyring_assoc_array_ops = {
0396     .get_key_chunk      = keyring_get_key_chunk,
0397     .get_object_key_chunk   = keyring_get_object_key_chunk,
0398     .compare_object     = keyring_compare_object,
0399     .diff_objects       = keyring_diff_objects,
0400     .free_object        = keyring_free_object,
0401 };
0402 
0403 /*
0404  * Clean up a keyring when it is destroyed.  Unpublish its name if it had one
0405  * and dispose of its data.
0406  *
0407  * The garbage collector detects the final key_put(), removes the keyring from
0408  * the serial number tree and then does RCU synchronisation before coming here,
0409  * so we shouldn't need to worry about code poking around here with the RCU
0410  * readlock held by this time.
0411  */
0412 static void keyring_destroy(struct key *keyring)
0413 {
0414     if (keyring->description) {
0415         write_lock(&keyring_name_lock);
0416 
0417         if (keyring->name_link.next != NULL &&
0418             !list_empty(&keyring->name_link))
0419             list_del(&keyring->name_link);
0420 
0421         write_unlock(&keyring_name_lock);
0422     }
0423 
0424     if (keyring->restrict_link) {
0425         struct key_restriction *keyres = keyring->restrict_link;
0426 
0427         key_put(keyres->key);
0428         kfree(keyres);
0429     }
0430 
0431     assoc_array_destroy(&keyring->keys, &keyring_assoc_array_ops);
0432 }
0433 
0434 /*
0435  * Describe a keyring for /proc.
0436  */
0437 static void keyring_describe(const struct key *keyring, struct seq_file *m)
0438 {
0439     if (keyring->description)
0440         seq_puts(m, keyring->description);
0441     else
0442         seq_puts(m, "[anon]");
0443 
0444     if (key_is_positive(keyring)) {
0445         if (keyring->keys.nr_leaves_on_tree != 0)
0446             seq_printf(m, ": %lu", keyring->keys.nr_leaves_on_tree);
0447         else
0448             seq_puts(m, ": empty");
0449     }
0450 }
0451 
0452 struct keyring_read_iterator_context {
0453     size_t          buflen;
0454     size_t          count;
0455     key_serial_t        *buffer;
0456 };
0457 
0458 static int keyring_read_iterator(const void *object, void *data)
0459 {
0460     struct keyring_read_iterator_context *ctx = data;
0461     const struct key *key = keyring_ptr_to_key(object);
0462 
0463     kenter("{%s,%d},,{%zu/%zu}",
0464            key->type->name, key->serial, ctx->count, ctx->buflen);
0465 
0466     if (ctx->count >= ctx->buflen)
0467         return 1;
0468 
0469     *ctx->buffer++ = key->serial;
0470     ctx->count += sizeof(key->serial);
0471     return 0;
0472 }
0473 
0474 /*
0475  * Read a list of key IDs from the keyring's contents in binary form
0476  *
0477  * The keyring's semaphore is read-locked by the caller.  This prevents someone
0478  * from modifying it under us - which could cause us to read key IDs multiple
0479  * times.
0480  */
0481 static long keyring_read(const struct key *keyring,
0482              char *buffer, size_t buflen)
0483 {
0484     struct keyring_read_iterator_context ctx;
0485     long ret;
0486 
0487     kenter("{%d},,%zu", key_serial(keyring), buflen);
0488 
0489     if (buflen & (sizeof(key_serial_t) - 1))
0490         return -EINVAL;
0491 
0492     /* Copy as many key IDs as fit into the buffer */
0493     if (buffer && buflen) {
0494         ctx.buffer = (key_serial_t *)buffer;
0495         ctx.buflen = buflen;
0496         ctx.count = 0;
0497         ret = assoc_array_iterate(&keyring->keys,
0498                       keyring_read_iterator, &ctx);
0499         if (ret < 0) {
0500             kleave(" = %ld [iterate]", ret);
0501             return ret;
0502         }
0503     }
0504 
0505     /* Return the size of the buffer needed */
0506     ret = keyring->keys.nr_leaves_on_tree * sizeof(key_serial_t);
0507     if (ret <= buflen)
0508         kleave("= %ld [ok]", ret);
0509     else
0510         kleave("= %ld [buffer too small]", ret);
0511     return ret;
0512 }
0513 
0514 /*
0515  * Allocate a keyring and link into the destination keyring.
0516  */
0517 struct key *keyring_alloc(const char *description, kuid_t uid, kgid_t gid,
0518               const struct cred *cred, key_perm_t perm,
0519               unsigned long flags,
0520               struct key_restriction *restrict_link,
0521               struct key *dest)
0522 {
0523     struct key *keyring;
0524     int ret;
0525 
0526     keyring = key_alloc(&key_type_keyring, description,
0527                 uid, gid, cred, perm, flags, restrict_link);
0528     if (!IS_ERR(keyring)) {
0529         ret = key_instantiate_and_link(keyring, NULL, 0, dest, NULL);
0530         if (ret < 0) {
0531             key_put(keyring);
0532             keyring = ERR_PTR(ret);
0533         }
0534     }
0535 
0536     return keyring;
0537 }
0538 EXPORT_SYMBOL(keyring_alloc);
0539 
0540 /**
0541  * restrict_link_reject - Give -EPERM to restrict link
0542  * @keyring: The keyring being added to.
0543  * @type: The type of key being added.
0544  * @payload: The payload of the key intended to be added.
0545  * @restriction_key: Keys providing additional data for evaluating restriction.
0546  *
0547  * Reject the addition of any links to a keyring.  It can be overridden by
0548  * passing KEY_ALLOC_BYPASS_RESTRICTION to key_instantiate_and_link() when
0549  * adding a key to a keyring.
0550  *
0551  * This is meant to be stored in a key_restriction structure which is passed
0552  * in the restrict_link parameter to keyring_alloc().
0553  */
0554 int restrict_link_reject(struct key *keyring,
0555              const struct key_type *type,
0556              const union key_payload *payload,
0557              struct key *restriction_key)
0558 {
0559     return -EPERM;
0560 }
0561 
0562 /*
0563  * By default, we keys found by getting an exact match on their descriptions.
0564  */
0565 bool key_default_cmp(const struct key *key,
0566              const struct key_match_data *match_data)
0567 {
0568     return strcmp(key->description, match_data->raw_data) == 0;
0569 }
0570 
0571 /*
0572  * Iteration function to consider each key found.
0573  */
0574 static int keyring_search_iterator(const void *object, void *iterator_data)
0575 {
0576     struct keyring_search_context *ctx = iterator_data;
0577     const struct key *key = keyring_ptr_to_key(object);
0578     unsigned long kflags = READ_ONCE(key->flags);
0579     short state = READ_ONCE(key->state);
0580 
0581     kenter("{%d}", key->serial);
0582 
0583     /* ignore keys not of this type */
0584     if (key->type != ctx->index_key.type) {
0585         kleave(" = 0 [!type]");
0586         return 0;
0587     }
0588 
0589     /* skip invalidated, revoked and expired keys */
0590     if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
0591         time64_t expiry = READ_ONCE(key->expiry);
0592 
0593         if (kflags & ((1 << KEY_FLAG_INVALIDATED) |
0594                   (1 << KEY_FLAG_REVOKED))) {
0595             ctx->result = ERR_PTR(-EKEYREVOKED);
0596             kleave(" = %d [invrev]", ctx->skipped_ret);
0597             goto skipped;
0598         }
0599 
0600         if (expiry && ctx->now >= expiry) {
0601             if (!(ctx->flags & KEYRING_SEARCH_SKIP_EXPIRED))
0602                 ctx->result = ERR_PTR(-EKEYEXPIRED);
0603             kleave(" = %d [expire]", ctx->skipped_ret);
0604             goto skipped;
0605         }
0606     }
0607 
0608     /* keys that don't match */
0609     if (!ctx->match_data.cmp(key, &ctx->match_data)) {
0610         kleave(" = 0 [!match]");
0611         return 0;
0612     }
0613 
0614     /* key must have search permissions */
0615     if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) &&
0616         key_task_permission(make_key_ref(key, ctx->possessed),
0617                 ctx->cred, KEY_NEED_SEARCH) < 0) {
0618         ctx->result = ERR_PTR(-EACCES);
0619         kleave(" = %d [!perm]", ctx->skipped_ret);
0620         goto skipped;
0621     }
0622 
0623     if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
0624         /* we set a different error code if we pass a negative key */
0625         if (state < 0) {
0626             ctx->result = ERR_PTR(state);
0627             kleave(" = %d [neg]", ctx->skipped_ret);
0628             goto skipped;
0629         }
0630     }
0631 
0632     /* Found */
0633     ctx->result = make_key_ref(key, ctx->possessed);
0634     kleave(" = 1 [found]");
0635     return 1;
0636 
0637 skipped:
0638     return ctx->skipped_ret;
0639 }
0640 
0641 /*
0642  * Search inside a keyring for a key.  We can search by walking to it
0643  * directly based on its index-key or we can iterate over the entire
0644  * tree looking for it, based on the match function.
0645  */
0646 static int search_keyring(struct key *keyring, struct keyring_search_context *ctx)
0647 {
0648     if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_DIRECT) {
0649         const void *object;
0650 
0651         object = assoc_array_find(&keyring->keys,
0652                       &keyring_assoc_array_ops,
0653                       &ctx->index_key);
0654         return object ? ctx->iterator(object, ctx) : 0;
0655     }
0656     return assoc_array_iterate(&keyring->keys, ctx->iterator, ctx);
0657 }
0658 
0659 /*
0660  * Search a tree of keyrings that point to other keyrings up to the maximum
0661  * depth.
0662  */
0663 static bool search_nested_keyrings(struct key *keyring,
0664                    struct keyring_search_context *ctx)
0665 {
0666     struct {
0667         struct key *keyring;
0668         struct assoc_array_node *node;
0669         int slot;
0670     } stack[KEYRING_SEARCH_MAX_DEPTH];
0671 
0672     struct assoc_array_shortcut *shortcut;
0673     struct assoc_array_node *node;
0674     struct assoc_array_ptr *ptr;
0675     struct key *key;
0676     int sp = 0, slot;
0677 
0678     kenter("{%d},{%s,%s}",
0679            keyring->serial,
0680            ctx->index_key.type->name,
0681            ctx->index_key.description);
0682 
0683 #define STATE_CHECKS (KEYRING_SEARCH_NO_STATE_CHECK | KEYRING_SEARCH_DO_STATE_CHECK)
0684     BUG_ON((ctx->flags & STATE_CHECKS) == 0 ||
0685            (ctx->flags & STATE_CHECKS) == STATE_CHECKS);
0686 
0687     if (ctx->index_key.description)
0688         key_set_index_key(&ctx->index_key);
0689 
0690     /* Check to see if this top-level keyring is what we are looking for
0691      * and whether it is valid or not.
0692      */
0693     if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_ITERATE ||
0694         keyring_compare_object(keyring, &ctx->index_key)) {
0695         ctx->skipped_ret = 2;
0696         switch (ctx->iterator(keyring_key_to_ptr(keyring), ctx)) {
0697         case 1:
0698             goto found;
0699         case 2:
0700             return false;
0701         default:
0702             break;
0703         }
0704     }
0705 
0706     ctx->skipped_ret = 0;
0707 
0708     /* Start processing a new keyring */
0709 descend_to_keyring:
0710     kdebug("descend to %d", keyring->serial);
0711     if (keyring->flags & ((1 << KEY_FLAG_INVALIDATED) |
0712                   (1 << KEY_FLAG_REVOKED)))
0713         goto not_this_keyring;
0714 
0715     /* Search through the keys in this keyring before its searching its
0716      * subtrees.
0717      */
0718     if (search_keyring(keyring, ctx))
0719         goto found;
0720 
0721     /* Then manually iterate through the keyrings nested in this one.
0722      *
0723      * Start from the root node of the index tree.  Because of the way the
0724      * hash function has been set up, keyrings cluster on the leftmost
0725      * branch of the root node (root slot 0) or in the root node itself.
0726      * Non-keyrings avoid the leftmost branch of the root entirely (root
0727      * slots 1-15).
0728      */
0729     if (!(ctx->flags & KEYRING_SEARCH_RECURSE))
0730         goto not_this_keyring;
0731 
0732     ptr = READ_ONCE(keyring->keys.root);
0733     if (!ptr)
0734         goto not_this_keyring;
0735 
0736     if (assoc_array_ptr_is_shortcut(ptr)) {
0737         /* If the root is a shortcut, either the keyring only contains
0738          * keyring pointers (everything clusters behind root slot 0) or
0739          * doesn't contain any keyring pointers.
0740          */
0741         shortcut = assoc_array_ptr_to_shortcut(ptr);
0742         if ((shortcut->index_key[0] & ASSOC_ARRAY_FAN_MASK) != 0)
0743             goto not_this_keyring;
0744 
0745         ptr = READ_ONCE(shortcut->next_node);
0746         node = assoc_array_ptr_to_node(ptr);
0747         goto begin_node;
0748     }
0749 
0750     node = assoc_array_ptr_to_node(ptr);
0751     ptr = node->slots[0];
0752     if (!assoc_array_ptr_is_meta(ptr))
0753         goto begin_node;
0754 
0755 descend_to_node:
0756     /* Descend to a more distal node in this keyring's content tree and go
0757      * through that.
0758      */
0759     kdebug("descend");
0760     if (assoc_array_ptr_is_shortcut(ptr)) {
0761         shortcut = assoc_array_ptr_to_shortcut(ptr);
0762         ptr = READ_ONCE(shortcut->next_node);
0763         BUG_ON(!assoc_array_ptr_is_node(ptr));
0764     }
0765     node = assoc_array_ptr_to_node(ptr);
0766 
0767 begin_node:
0768     kdebug("begin_node");
0769     slot = 0;
0770 ascend_to_node:
0771     /* Go through the slots in a node */
0772     for (; slot < ASSOC_ARRAY_FAN_OUT; slot++) {
0773         ptr = READ_ONCE(node->slots[slot]);
0774 
0775         if (assoc_array_ptr_is_meta(ptr) && node->back_pointer)
0776             goto descend_to_node;
0777 
0778         if (!keyring_ptr_is_keyring(ptr))
0779             continue;
0780 
0781         key = keyring_ptr_to_key(ptr);
0782 
0783         if (sp >= KEYRING_SEARCH_MAX_DEPTH) {
0784             if (ctx->flags & KEYRING_SEARCH_DETECT_TOO_DEEP) {
0785                 ctx->result = ERR_PTR(-ELOOP);
0786                 return false;
0787             }
0788             goto not_this_keyring;
0789         }
0790 
0791         /* Search a nested keyring */
0792         if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) &&
0793             key_task_permission(make_key_ref(key, ctx->possessed),
0794                     ctx->cred, KEY_NEED_SEARCH) < 0)
0795             continue;
0796 
0797         /* stack the current position */
0798         stack[sp].keyring = keyring;
0799         stack[sp].node = node;
0800         stack[sp].slot = slot;
0801         sp++;
0802 
0803         /* begin again with the new keyring */
0804         keyring = key;
0805         goto descend_to_keyring;
0806     }
0807 
0808     /* We've dealt with all the slots in the current node, so now we need
0809      * to ascend to the parent and continue processing there.
0810      */
0811     ptr = READ_ONCE(node->back_pointer);
0812     slot = node->parent_slot;
0813 
0814     if (ptr && assoc_array_ptr_is_shortcut(ptr)) {
0815         shortcut = assoc_array_ptr_to_shortcut(ptr);
0816         ptr = READ_ONCE(shortcut->back_pointer);
0817         slot = shortcut->parent_slot;
0818     }
0819     if (!ptr)
0820         goto not_this_keyring;
0821     node = assoc_array_ptr_to_node(ptr);
0822     slot++;
0823 
0824     /* If we've ascended to the root (zero backpointer), we must have just
0825      * finished processing the leftmost branch rather than the root slots -
0826      * so there can't be any more keyrings for us to find.
0827      */
0828     if (node->back_pointer) {
0829         kdebug("ascend %d", slot);
0830         goto ascend_to_node;
0831     }
0832 
0833     /* The keyring we're looking at was disqualified or didn't contain a
0834      * matching key.
0835      */
0836 not_this_keyring:
0837     kdebug("not_this_keyring %d", sp);
0838     if (sp <= 0) {
0839         kleave(" = false");
0840         return false;
0841     }
0842 
0843     /* Resume the processing of a keyring higher up in the tree */
0844     sp--;
0845     keyring = stack[sp].keyring;
0846     node = stack[sp].node;
0847     slot = stack[sp].slot + 1;
0848     kdebug("ascend to %d [%d]", keyring->serial, slot);
0849     goto ascend_to_node;
0850 
0851     /* We found a viable match */
0852 found:
0853     key = key_ref_to_ptr(ctx->result);
0854     key_check(key);
0855     if (!(ctx->flags & KEYRING_SEARCH_NO_UPDATE_TIME)) {
0856         key->last_used_at = ctx->now;
0857         keyring->last_used_at = ctx->now;
0858         while (sp > 0)
0859             stack[--sp].keyring->last_used_at = ctx->now;
0860     }
0861     kleave(" = true");
0862     return true;
0863 }
0864 
0865 /**
0866  * keyring_search_rcu - Search a keyring tree for a matching key under RCU
0867  * @keyring_ref: A pointer to the keyring with possession indicator.
0868  * @ctx: The keyring search context.
0869  *
0870  * Search the supplied keyring tree for a key that matches the criteria given.
0871  * The root keyring and any linked keyrings must grant Search permission to the
0872  * caller to be searchable and keys can only be found if they too grant Search
0873  * to the caller. The possession flag on the root keyring pointer controls use
0874  * of the possessor bits in permissions checking of the entire tree.  In
0875  * addition, the LSM gets to forbid keyring searches and key matches.
0876  *
0877  * The search is performed as a breadth-then-depth search up to the prescribed
0878  * limit (KEYRING_SEARCH_MAX_DEPTH).  The caller must hold the RCU read lock to
0879  * prevent keyrings from being destroyed or rearranged whilst they are being
0880  * searched.
0881  *
0882  * Keys are matched to the type provided and are then filtered by the match
0883  * function, which is given the description to use in any way it sees fit.  The
0884  * match function may use any attributes of a key that it wishes to
0885  * determine the match.  Normally the match function from the key type would be
0886  * used.
0887  *
0888  * RCU can be used to prevent the keyring key lists from disappearing without
0889  * the need to take lots of locks.
0890  *
0891  * Returns a pointer to the found key and increments the key usage count if
0892  * successful; -EAGAIN if no matching keys were found, or if expired or revoked
0893  * keys were found; -ENOKEY if only negative keys were found; -ENOTDIR if the
0894  * specified keyring wasn't a keyring.
0895  *
0896  * In the case of a successful return, the possession attribute from
0897  * @keyring_ref is propagated to the returned key reference.
0898  */
0899 key_ref_t keyring_search_rcu(key_ref_t keyring_ref,
0900                  struct keyring_search_context *ctx)
0901 {
0902     struct key *keyring;
0903     long err;
0904 
0905     ctx->iterator = keyring_search_iterator;
0906     ctx->possessed = is_key_possessed(keyring_ref);
0907     ctx->result = ERR_PTR(-EAGAIN);
0908 
0909     keyring = key_ref_to_ptr(keyring_ref);
0910     key_check(keyring);
0911 
0912     if (keyring->type != &key_type_keyring)
0913         return ERR_PTR(-ENOTDIR);
0914 
0915     if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM)) {
0916         err = key_task_permission(keyring_ref, ctx->cred, KEY_NEED_SEARCH);
0917         if (err < 0)
0918             return ERR_PTR(err);
0919     }
0920 
0921     ctx->now = ktime_get_real_seconds();
0922     if (search_nested_keyrings(keyring, ctx))
0923         __key_get(key_ref_to_ptr(ctx->result));
0924     return ctx->result;
0925 }
0926 
0927 /**
0928  * keyring_search - Search the supplied keyring tree for a matching key
0929  * @keyring: The root of the keyring tree to be searched.
0930  * @type: The type of keyring we want to find.
0931  * @description: The name of the keyring we want to find.
0932  * @recurse: True to search the children of @keyring also
0933  *
0934  * As keyring_search_rcu() above, but using the current task's credentials and
0935  * type's default matching function and preferred search method.
0936  */
0937 key_ref_t keyring_search(key_ref_t keyring,
0938              struct key_type *type,
0939              const char *description,
0940              bool recurse)
0941 {
0942     struct keyring_search_context ctx = {
0943         .index_key.type     = type,
0944         .index_key.description  = description,
0945         .index_key.desc_len = strlen(description),
0946         .cred           = current_cred(),
0947         .match_data.cmp     = key_default_cmp,
0948         .match_data.raw_data    = description,
0949         .match_data.lookup_type = KEYRING_SEARCH_LOOKUP_DIRECT,
0950         .flags          = KEYRING_SEARCH_DO_STATE_CHECK,
0951     };
0952     key_ref_t key;
0953     int ret;
0954 
0955     if (recurse)
0956         ctx.flags |= KEYRING_SEARCH_RECURSE;
0957     if (type->match_preparse) {
0958         ret = type->match_preparse(&ctx.match_data);
0959         if (ret < 0)
0960             return ERR_PTR(ret);
0961     }
0962 
0963     rcu_read_lock();
0964     key = keyring_search_rcu(keyring, &ctx);
0965     rcu_read_unlock();
0966 
0967     if (type->match_free)
0968         type->match_free(&ctx.match_data);
0969     return key;
0970 }
0971 EXPORT_SYMBOL(keyring_search);
0972 
0973 static struct key_restriction *keyring_restriction_alloc(
0974     key_restrict_link_func_t check)
0975 {
0976     struct key_restriction *keyres =
0977         kzalloc(sizeof(struct key_restriction), GFP_KERNEL);
0978 
0979     if (!keyres)
0980         return ERR_PTR(-ENOMEM);
0981 
0982     keyres->check = check;
0983 
0984     return keyres;
0985 }
0986 
0987 /*
0988  * Semaphore to serialise restriction setup to prevent reference count
0989  * cycles through restriction key pointers.
0990  */
0991 static DECLARE_RWSEM(keyring_serialise_restrict_sem);
0992 
0993 /*
0994  * Check for restriction cycles that would prevent keyring garbage collection.
0995  * keyring_serialise_restrict_sem must be held.
0996  */
0997 static bool keyring_detect_restriction_cycle(const struct key *dest_keyring,
0998                          struct key_restriction *keyres)
0999 {
1000     while (keyres && keyres->key &&
1001            keyres->key->type == &key_type_keyring) {
1002         if (keyres->key == dest_keyring)
1003             return true;
1004 
1005         keyres = keyres->key->restrict_link;
1006     }
1007 
1008     return false;
1009 }
1010 
1011 /**
1012  * keyring_restrict - Look up and apply a restriction to a keyring
1013  * @keyring_ref: The keyring to be restricted
1014  * @type: The key type that will provide the restriction checker.
1015  * @restriction: The restriction options to apply to the keyring
1016  *
1017  * Look up a keyring and apply a restriction to it.  The restriction is managed
1018  * by the specific key type, but can be configured by the options specified in
1019  * the restriction string.
1020  */
1021 int keyring_restrict(key_ref_t keyring_ref, const char *type,
1022              const char *restriction)
1023 {
1024     struct key *keyring;
1025     struct key_type *restrict_type = NULL;
1026     struct key_restriction *restrict_link;
1027     int ret = 0;
1028 
1029     keyring = key_ref_to_ptr(keyring_ref);
1030     key_check(keyring);
1031 
1032     if (keyring->type != &key_type_keyring)
1033         return -ENOTDIR;
1034 
1035     if (!type) {
1036         restrict_link = keyring_restriction_alloc(restrict_link_reject);
1037     } else {
1038         restrict_type = key_type_lookup(type);
1039 
1040         if (IS_ERR(restrict_type))
1041             return PTR_ERR(restrict_type);
1042 
1043         if (!restrict_type->lookup_restriction) {
1044             ret = -ENOENT;
1045             goto error;
1046         }
1047 
1048         restrict_link = restrict_type->lookup_restriction(restriction);
1049     }
1050 
1051     if (IS_ERR(restrict_link)) {
1052         ret = PTR_ERR(restrict_link);
1053         goto error;
1054     }
1055 
1056     down_write(&keyring->sem);
1057     down_write(&keyring_serialise_restrict_sem);
1058 
1059     if (keyring->restrict_link) {
1060         ret = -EEXIST;
1061     } else if (keyring_detect_restriction_cycle(keyring, restrict_link)) {
1062         ret = -EDEADLK;
1063     } else {
1064         keyring->restrict_link = restrict_link;
1065         notify_key(keyring, NOTIFY_KEY_SETATTR, 0);
1066     }
1067 
1068     up_write(&keyring_serialise_restrict_sem);
1069     up_write(&keyring->sem);
1070 
1071     if (ret < 0) {
1072         key_put(restrict_link->key);
1073         kfree(restrict_link);
1074     }
1075 
1076 error:
1077     if (restrict_type)
1078         key_type_put(restrict_type);
1079 
1080     return ret;
1081 }
1082 EXPORT_SYMBOL(keyring_restrict);
1083 
1084 /*
1085  * Search the given keyring for a key that might be updated.
1086  *
1087  * The caller must guarantee that the keyring is a keyring and that the
1088  * permission is granted to modify the keyring as no check is made here.  The
1089  * caller must also hold a lock on the keyring semaphore.
1090  *
1091  * Returns a pointer to the found key with usage count incremented if
1092  * successful and returns NULL if not found.  Revoked and invalidated keys are
1093  * skipped over.
1094  *
1095  * If successful, the possession indicator is propagated from the keyring ref
1096  * to the returned key reference.
1097  */
1098 key_ref_t find_key_to_update(key_ref_t keyring_ref,
1099                  const struct keyring_index_key *index_key)
1100 {
1101     struct key *keyring, *key;
1102     const void *object;
1103 
1104     keyring = key_ref_to_ptr(keyring_ref);
1105 
1106     kenter("{%d},{%s,%s}",
1107            keyring->serial, index_key->type->name, index_key->description);
1108 
1109     object = assoc_array_find(&keyring->keys, &keyring_assoc_array_ops,
1110                   index_key);
1111 
1112     if (object)
1113         goto found;
1114 
1115     kleave(" = NULL");
1116     return NULL;
1117 
1118 found:
1119     key = keyring_ptr_to_key(object);
1120     if (key->flags & ((1 << KEY_FLAG_INVALIDATED) |
1121               (1 << KEY_FLAG_REVOKED))) {
1122         kleave(" = NULL [x]");
1123         return NULL;
1124     }
1125     __key_get(key);
1126     kleave(" = {%d}", key->serial);
1127     return make_key_ref(key, is_key_possessed(keyring_ref));
1128 }
1129 
1130 /*
1131  * Find a keyring with the specified name.
1132  *
1133  * Only keyrings that have nonzero refcount, are not revoked, and are owned by a
1134  * user in the current user namespace are considered.  If @uid_keyring is %true,
1135  * the keyring additionally must have been allocated as a user or user session
1136  * keyring; otherwise, it must grant Search permission directly to the caller.
1137  *
1138  * Returns a pointer to the keyring with the keyring's refcount having being
1139  * incremented on success.  -ENOKEY is returned if a key could not be found.
1140  */
1141 struct key *find_keyring_by_name(const char *name, bool uid_keyring)
1142 {
1143     struct user_namespace *ns = current_user_ns();
1144     struct key *keyring;
1145 
1146     if (!name)
1147         return ERR_PTR(-EINVAL);
1148 
1149     read_lock(&keyring_name_lock);
1150 
1151     /* Search this hash bucket for a keyring with a matching name that
1152      * grants Search permission and that hasn't been revoked
1153      */
1154     list_for_each_entry(keyring, &ns->keyring_name_list, name_link) {
1155         if (!kuid_has_mapping(ns, keyring->user->uid))
1156             continue;
1157 
1158         if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
1159             continue;
1160 
1161         if (strcmp(keyring->description, name) != 0)
1162             continue;
1163 
1164         if (uid_keyring) {
1165             if (!test_bit(KEY_FLAG_UID_KEYRING,
1166                       &keyring->flags))
1167                 continue;
1168         } else {
1169             if (key_permission(make_key_ref(keyring, 0),
1170                        KEY_NEED_SEARCH) < 0)
1171                 continue;
1172         }
1173 
1174         /* we've got a match but we might end up racing with
1175          * key_cleanup() if the keyring is currently 'dead'
1176          * (ie. it has a zero usage count) */
1177         if (!refcount_inc_not_zero(&keyring->usage))
1178             continue;
1179         keyring->last_used_at = ktime_get_real_seconds();
1180         goto out;
1181     }
1182 
1183     keyring = ERR_PTR(-ENOKEY);
1184 out:
1185     read_unlock(&keyring_name_lock);
1186     return keyring;
1187 }
1188 
1189 static int keyring_detect_cycle_iterator(const void *object,
1190                      void *iterator_data)
1191 {
1192     struct keyring_search_context *ctx = iterator_data;
1193     const struct key *key = keyring_ptr_to_key(object);
1194 
1195     kenter("{%d}", key->serial);
1196 
1197     /* We might get a keyring with matching index-key that is nonetheless a
1198      * different keyring. */
1199     if (key != ctx->match_data.raw_data)
1200         return 0;
1201 
1202     ctx->result = ERR_PTR(-EDEADLK);
1203     return 1;
1204 }
1205 
1206 /*
1207  * See if a cycle will be created by inserting acyclic tree B in acyclic
1208  * tree A at the topmost level (ie: as a direct child of A).
1209  *
1210  * Since we are adding B to A at the top level, checking for cycles should just
1211  * be a matter of seeing if node A is somewhere in tree B.
1212  */
1213 static int keyring_detect_cycle(struct key *A, struct key *B)
1214 {
1215     struct keyring_search_context ctx = {
1216         .index_key      = A->index_key,
1217         .match_data.raw_data    = A,
1218         .match_data.lookup_type = KEYRING_SEARCH_LOOKUP_DIRECT,
1219         .iterator       = keyring_detect_cycle_iterator,
1220         .flags          = (KEYRING_SEARCH_NO_STATE_CHECK |
1221                        KEYRING_SEARCH_NO_UPDATE_TIME |
1222                        KEYRING_SEARCH_NO_CHECK_PERM |
1223                        KEYRING_SEARCH_DETECT_TOO_DEEP |
1224                        KEYRING_SEARCH_RECURSE),
1225     };
1226 
1227     rcu_read_lock();
1228     search_nested_keyrings(B, &ctx);
1229     rcu_read_unlock();
1230     return PTR_ERR(ctx.result) == -EAGAIN ? 0 : PTR_ERR(ctx.result);
1231 }
1232 
1233 /*
1234  * Lock keyring for link.
1235  */
1236 int __key_link_lock(struct key *keyring,
1237             const struct keyring_index_key *index_key)
1238     __acquires(&keyring->sem)
1239     __acquires(&keyring_serialise_link_lock)
1240 {
1241     if (keyring->type != &key_type_keyring)
1242         return -ENOTDIR;
1243 
1244     down_write(&keyring->sem);
1245 
1246     /* Serialise link/link calls to prevent parallel calls causing a cycle
1247      * when linking two keyring in opposite orders.
1248      */
1249     if (index_key->type == &key_type_keyring)
1250         mutex_lock(&keyring_serialise_link_lock);
1251 
1252     return 0;
1253 }
1254 
1255 /*
1256  * Lock keyrings for move (link/unlink combination).
1257  */
1258 int __key_move_lock(struct key *l_keyring, struct key *u_keyring,
1259             const struct keyring_index_key *index_key)
1260     __acquires(&l_keyring->sem)
1261     __acquires(&u_keyring->sem)
1262     __acquires(&keyring_serialise_link_lock)
1263 {
1264     if (l_keyring->type != &key_type_keyring ||
1265         u_keyring->type != &key_type_keyring)
1266         return -ENOTDIR;
1267 
1268     /* We have to be very careful here to take the keyring locks in the
1269      * right order, lest we open ourselves to deadlocking against another
1270      * move operation.
1271      */
1272     if (l_keyring < u_keyring) {
1273         down_write(&l_keyring->sem);
1274         down_write_nested(&u_keyring->sem, 1);
1275     } else {
1276         down_write(&u_keyring->sem);
1277         down_write_nested(&l_keyring->sem, 1);
1278     }
1279 
1280     /* Serialise link/link calls to prevent parallel calls causing a cycle
1281      * when linking two keyring in opposite orders.
1282      */
1283     if (index_key->type == &key_type_keyring)
1284         mutex_lock(&keyring_serialise_link_lock);
1285 
1286     return 0;
1287 }
1288 
1289 /*
1290  * Preallocate memory so that a key can be linked into to a keyring.
1291  */
1292 int __key_link_begin(struct key *keyring,
1293              const struct keyring_index_key *index_key,
1294              struct assoc_array_edit **_edit)
1295 {
1296     struct assoc_array_edit *edit;
1297     int ret;
1298 
1299     kenter("%d,%s,%s,",
1300            keyring->serial, index_key->type->name, index_key->description);
1301 
1302     BUG_ON(index_key->desc_len == 0);
1303     BUG_ON(*_edit != NULL);
1304 
1305     *_edit = NULL;
1306 
1307     ret = -EKEYREVOKED;
1308     if (test_bit(KEY_FLAG_REVOKED, &keyring->flags))
1309         goto error;
1310 
1311     /* Create an edit script that will insert/replace the key in the
1312      * keyring tree.
1313      */
1314     edit = assoc_array_insert(&keyring->keys,
1315                   &keyring_assoc_array_ops,
1316                   index_key,
1317                   NULL);
1318     if (IS_ERR(edit)) {
1319         ret = PTR_ERR(edit);
1320         goto error;
1321     }
1322 
1323     /* If we're not replacing a link in-place then we're going to need some
1324      * extra quota.
1325      */
1326     if (!edit->dead_leaf) {
1327         ret = key_payload_reserve(keyring,
1328                       keyring->datalen + KEYQUOTA_LINK_BYTES);
1329         if (ret < 0)
1330             goto error_cancel;
1331     }
1332 
1333     *_edit = edit;
1334     kleave(" = 0");
1335     return 0;
1336 
1337 error_cancel:
1338     assoc_array_cancel_edit(edit);
1339 error:
1340     kleave(" = %d", ret);
1341     return ret;
1342 }
1343 
1344 /*
1345  * Check already instantiated keys aren't going to be a problem.
1346  *
1347  * The caller must have called __key_link_begin(). Don't need to call this for
1348  * keys that were created since __key_link_begin() was called.
1349  */
1350 int __key_link_check_live_key(struct key *keyring, struct key *key)
1351 {
1352     if (key->type == &key_type_keyring)
1353         /* check that we aren't going to create a cycle by linking one
1354          * keyring to another */
1355         return keyring_detect_cycle(keyring, key);
1356     return 0;
1357 }
1358 
1359 /*
1360  * Link a key into to a keyring.
1361  *
1362  * Must be called with __key_link_begin() having being called.  Discards any
1363  * already extant link to matching key if there is one, so that each keyring
1364  * holds at most one link to any given key of a particular type+description
1365  * combination.
1366  */
1367 void __key_link(struct key *keyring, struct key *key,
1368         struct assoc_array_edit **_edit)
1369 {
1370     __key_get(key);
1371     assoc_array_insert_set_object(*_edit, keyring_key_to_ptr(key));
1372     assoc_array_apply_edit(*_edit);
1373     *_edit = NULL;
1374     notify_key(keyring, NOTIFY_KEY_LINKED, key_serial(key));
1375 }
1376 
1377 /*
1378  * Finish linking a key into to a keyring.
1379  *
1380  * Must be called with __key_link_begin() having being called.
1381  */
1382 void __key_link_end(struct key *keyring,
1383             const struct keyring_index_key *index_key,
1384             struct assoc_array_edit *edit)
1385     __releases(&keyring->sem)
1386     __releases(&keyring_serialise_link_lock)
1387 {
1388     BUG_ON(index_key->type == NULL);
1389     kenter("%d,%s,", keyring->serial, index_key->type->name);
1390 
1391     if (edit) {
1392         if (!edit->dead_leaf) {
1393             key_payload_reserve(keyring,
1394                 keyring->datalen - KEYQUOTA_LINK_BYTES);
1395         }
1396         assoc_array_cancel_edit(edit);
1397     }
1398     up_write(&keyring->sem);
1399 
1400     if (index_key->type == &key_type_keyring)
1401         mutex_unlock(&keyring_serialise_link_lock);
1402 }
1403 
1404 /*
1405  * Check addition of keys to restricted keyrings.
1406  */
1407 static int __key_link_check_restriction(struct key *keyring, struct key *key)
1408 {
1409     if (!keyring->restrict_link || !keyring->restrict_link->check)
1410         return 0;
1411     return keyring->restrict_link->check(keyring, key->type, &key->payload,
1412                          keyring->restrict_link->key);
1413 }
1414 
1415 /**
1416  * key_link - Link a key to a keyring
1417  * @keyring: The keyring to make the link in.
1418  * @key: The key to link to.
1419  *
1420  * Make a link in a keyring to a key, such that the keyring holds a reference
1421  * on that key and the key can potentially be found by searching that keyring.
1422  *
1423  * This function will write-lock the keyring's semaphore and will consume some
1424  * of the user's key data quota to hold the link.
1425  *
1426  * Returns 0 if successful, -ENOTDIR if the keyring isn't a keyring,
1427  * -EKEYREVOKED if the keyring has been revoked, -ENFILE if the keyring is
1428  * full, -EDQUOT if there is insufficient key data quota remaining to add
1429  * another link or -ENOMEM if there's insufficient memory.
1430  *
1431  * It is assumed that the caller has checked that it is permitted for a link to
1432  * be made (the keyring should have Write permission and the key Link
1433  * permission).
1434  */
1435 int key_link(struct key *keyring, struct key *key)
1436 {
1437     struct assoc_array_edit *edit = NULL;
1438     int ret;
1439 
1440     kenter("{%d,%d}", keyring->serial, refcount_read(&keyring->usage));
1441 
1442     key_check(keyring);
1443     key_check(key);
1444 
1445     ret = __key_link_lock(keyring, &key->index_key);
1446     if (ret < 0)
1447         goto error;
1448 
1449     ret = __key_link_begin(keyring, &key->index_key, &edit);
1450     if (ret < 0)
1451         goto error_end;
1452 
1453     kdebug("begun {%d,%d}", keyring->serial, refcount_read(&keyring->usage));
1454     ret = __key_link_check_restriction(keyring, key);
1455     if (ret == 0)
1456         ret = __key_link_check_live_key(keyring, key);
1457     if (ret == 0)
1458         __key_link(keyring, key, &edit);
1459 
1460 error_end:
1461     __key_link_end(keyring, &key->index_key, edit);
1462 error:
1463     kleave(" = %d {%d,%d}", ret, keyring->serial, refcount_read(&keyring->usage));
1464     return ret;
1465 }
1466 EXPORT_SYMBOL(key_link);
1467 
1468 /*
1469  * Lock a keyring for unlink.
1470  */
1471 static int __key_unlink_lock(struct key *keyring)
1472     __acquires(&keyring->sem)
1473 {
1474     if (keyring->type != &key_type_keyring)
1475         return -ENOTDIR;
1476 
1477     down_write(&keyring->sem);
1478     return 0;
1479 }
1480 
1481 /*
1482  * Begin the process of unlinking a key from a keyring.
1483  */
1484 static int __key_unlink_begin(struct key *keyring, struct key *key,
1485                   struct assoc_array_edit **_edit)
1486 {
1487     struct assoc_array_edit *edit;
1488 
1489     BUG_ON(*_edit != NULL);
1490 
1491     edit = assoc_array_delete(&keyring->keys, &keyring_assoc_array_ops,
1492                   &key->index_key);
1493     if (IS_ERR(edit))
1494         return PTR_ERR(edit);
1495 
1496     if (!edit)
1497         return -ENOENT;
1498 
1499     *_edit = edit;
1500     return 0;
1501 }
1502 
1503 /*
1504  * Apply an unlink change.
1505  */
1506 static void __key_unlink(struct key *keyring, struct key *key,
1507              struct assoc_array_edit **_edit)
1508 {
1509     assoc_array_apply_edit(*_edit);
1510     notify_key(keyring, NOTIFY_KEY_UNLINKED, key_serial(key));
1511     *_edit = NULL;
1512     key_payload_reserve(keyring, keyring->datalen - KEYQUOTA_LINK_BYTES);
1513 }
1514 
1515 /*
1516  * Finish unlinking a key from to a keyring.
1517  */
1518 static void __key_unlink_end(struct key *keyring,
1519                  struct key *key,
1520                  struct assoc_array_edit *edit)
1521     __releases(&keyring->sem)
1522 {
1523     if (edit)
1524         assoc_array_cancel_edit(edit);
1525     up_write(&keyring->sem);
1526 }
1527 
1528 /**
1529  * key_unlink - Unlink the first link to a key from a keyring.
1530  * @keyring: The keyring to remove the link from.
1531  * @key: The key the link is to.
1532  *
1533  * Remove a link from a keyring to a key.
1534  *
1535  * This function will write-lock the keyring's semaphore.
1536  *
1537  * Returns 0 if successful, -ENOTDIR if the keyring isn't a keyring, -ENOENT if
1538  * the key isn't linked to by the keyring or -ENOMEM if there's insufficient
1539  * memory.
1540  *
1541  * It is assumed that the caller has checked that it is permitted for a link to
1542  * be removed (the keyring should have Write permission; no permissions are
1543  * required on the key).
1544  */
1545 int key_unlink(struct key *keyring, struct key *key)
1546 {
1547     struct assoc_array_edit *edit = NULL;
1548     int ret;
1549 
1550     key_check(keyring);
1551     key_check(key);
1552 
1553     ret = __key_unlink_lock(keyring);
1554     if (ret < 0)
1555         return ret;
1556 
1557     ret = __key_unlink_begin(keyring, key, &edit);
1558     if (ret == 0)
1559         __key_unlink(keyring, key, &edit);
1560     __key_unlink_end(keyring, key, edit);
1561     return ret;
1562 }
1563 EXPORT_SYMBOL(key_unlink);
1564 
1565 /**
1566  * key_move - Move a key from one keyring to another
1567  * @key: The key to move
1568  * @from_keyring: The keyring to remove the link from.
1569  * @to_keyring: The keyring to make the link in.
1570  * @flags: Qualifying flags, such as KEYCTL_MOVE_EXCL.
1571  *
1572  * Make a link in @to_keyring to a key, such that the keyring holds a reference
1573  * on that key and the key can potentially be found by searching that keyring
1574  * whilst simultaneously removing a link to the key from @from_keyring.
1575  *
1576  * This function will write-lock both keyring's semaphores and will consume
1577  * some of the user's key data quota to hold the link on @to_keyring.
1578  *
1579  * Returns 0 if successful, -ENOTDIR if either keyring isn't a keyring,
1580  * -EKEYREVOKED if either keyring has been revoked, -ENFILE if the second
1581  * keyring is full, -EDQUOT if there is insufficient key data quota remaining
1582  * to add another link or -ENOMEM if there's insufficient memory.  If
1583  * KEYCTL_MOVE_EXCL is set, then -EEXIST will be returned if there's already a
1584  * matching key in @to_keyring.
1585  *
1586  * It is assumed that the caller has checked that it is permitted for a link to
1587  * be made (the keyring should have Write permission and the key Link
1588  * permission).
1589  */
1590 int key_move(struct key *key,
1591          struct key *from_keyring,
1592          struct key *to_keyring,
1593          unsigned int flags)
1594 {
1595     struct assoc_array_edit *from_edit = NULL, *to_edit = NULL;
1596     int ret;
1597 
1598     kenter("%d,%d,%d", key->serial, from_keyring->serial, to_keyring->serial);
1599 
1600     if (from_keyring == to_keyring)
1601         return 0;
1602 
1603     key_check(key);
1604     key_check(from_keyring);
1605     key_check(to_keyring);
1606 
1607     ret = __key_move_lock(from_keyring, to_keyring, &key->index_key);
1608     if (ret < 0)
1609         goto out;
1610     ret = __key_unlink_begin(from_keyring, key, &from_edit);
1611     if (ret < 0)
1612         goto error;
1613     ret = __key_link_begin(to_keyring, &key->index_key, &to_edit);
1614     if (ret < 0)
1615         goto error;
1616 
1617     ret = -EEXIST;
1618     if (to_edit->dead_leaf && (flags & KEYCTL_MOVE_EXCL))
1619         goto error;
1620 
1621     ret = __key_link_check_restriction(to_keyring, key);
1622     if (ret < 0)
1623         goto error;
1624     ret = __key_link_check_live_key(to_keyring, key);
1625     if (ret < 0)
1626         goto error;
1627 
1628     __key_unlink(from_keyring, key, &from_edit);
1629     __key_link(to_keyring, key, &to_edit);
1630 error:
1631     __key_link_end(to_keyring, &key->index_key, to_edit);
1632     __key_unlink_end(from_keyring, key, from_edit);
1633 out:
1634     kleave(" = %d", ret);
1635     return ret;
1636 }
1637 EXPORT_SYMBOL(key_move);
1638 
1639 /**
1640  * keyring_clear - Clear a keyring
1641  * @keyring: The keyring to clear.
1642  *
1643  * Clear the contents of the specified keyring.
1644  *
1645  * Returns 0 if successful or -ENOTDIR if the keyring isn't a keyring.
1646  */
1647 int keyring_clear(struct key *keyring)
1648 {
1649     struct assoc_array_edit *edit;
1650     int ret;
1651 
1652     if (keyring->type != &key_type_keyring)
1653         return -ENOTDIR;
1654 
1655     down_write(&keyring->sem);
1656 
1657     edit = assoc_array_clear(&keyring->keys, &keyring_assoc_array_ops);
1658     if (IS_ERR(edit)) {
1659         ret = PTR_ERR(edit);
1660     } else {
1661         if (edit)
1662             assoc_array_apply_edit(edit);
1663         notify_key(keyring, NOTIFY_KEY_CLEARED, 0);
1664         key_payload_reserve(keyring, 0);
1665         ret = 0;
1666     }
1667 
1668     up_write(&keyring->sem);
1669     return ret;
1670 }
1671 EXPORT_SYMBOL(keyring_clear);
1672 
1673 /*
1674  * Dispose of the links from a revoked keyring.
1675  *
1676  * This is called with the key sem write-locked.
1677  */
1678 static void keyring_revoke(struct key *keyring)
1679 {
1680     struct assoc_array_edit *edit;
1681 
1682     edit = assoc_array_clear(&keyring->keys, &keyring_assoc_array_ops);
1683     if (!IS_ERR(edit)) {
1684         if (edit)
1685             assoc_array_apply_edit(edit);
1686         key_payload_reserve(keyring, 0);
1687     }
1688 }
1689 
1690 static bool keyring_gc_select_iterator(void *object, void *iterator_data)
1691 {
1692     struct key *key = keyring_ptr_to_key(object);
1693     time64_t *limit = iterator_data;
1694 
1695     if (key_is_dead(key, *limit))
1696         return false;
1697     key_get(key);
1698     return true;
1699 }
1700 
1701 static int keyring_gc_check_iterator(const void *object, void *iterator_data)
1702 {
1703     const struct key *key = keyring_ptr_to_key(object);
1704     time64_t *limit = iterator_data;
1705 
1706     key_check(key);
1707     return key_is_dead(key, *limit);
1708 }
1709 
1710 /*
1711  * Garbage collect pointers from a keyring.
1712  *
1713  * Not called with any locks held.  The keyring's key struct will not be
1714  * deallocated under us as only our caller may deallocate it.
1715  */
1716 void keyring_gc(struct key *keyring, time64_t limit)
1717 {
1718     int result;
1719 
1720     kenter("%x{%s}", keyring->serial, keyring->description ?: "");
1721 
1722     if (keyring->flags & ((1 << KEY_FLAG_INVALIDATED) |
1723                   (1 << KEY_FLAG_REVOKED)))
1724         goto dont_gc;
1725 
1726     /* scan the keyring looking for dead keys */
1727     rcu_read_lock();
1728     result = assoc_array_iterate(&keyring->keys,
1729                      keyring_gc_check_iterator, &limit);
1730     rcu_read_unlock();
1731     if (result == true)
1732         goto do_gc;
1733 
1734 dont_gc:
1735     kleave(" [no gc]");
1736     return;
1737 
1738 do_gc:
1739     down_write(&keyring->sem);
1740     assoc_array_gc(&keyring->keys, &keyring_assoc_array_ops,
1741                keyring_gc_select_iterator, &limit);
1742     up_write(&keyring->sem);
1743     kleave(" [gc]");
1744 }
1745 
1746 /*
1747  * Garbage collect restriction pointers from a keyring.
1748  *
1749  * Keyring restrictions are associated with a key type, and must be cleaned
1750  * up if the key type is unregistered. The restriction is altered to always
1751  * reject additional keys so a keyring cannot be opened up by unregistering
1752  * a key type.
1753  *
1754  * Not called with any keyring locks held. The keyring's key struct will not
1755  * be deallocated under us as only our caller may deallocate it.
1756  *
1757  * The caller is required to hold key_types_sem and dead_type->sem. This is
1758  * fulfilled by key_gc_keytype() holding the locks on behalf of
1759  * key_garbage_collector(), which it invokes on a workqueue.
1760  */
1761 void keyring_restriction_gc(struct key *keyring, struct key_type *dead_type)
1762 {
1763     struct key_restriction *keyres;
1764 
1765     kenter("%x{%s}", keyring->serial, keyring->description ?: "");
1766 
1767     /*
1768      * keyring->restrict_link is only assigned at key allocation time
1769      * or with the key type locked, so the only values that could be
1770      * concurrently assigned to keyring->restrict_link are for key
1771      * types other than dead_type. Given this, it's ok to check
1772      * the key type before acquiring keyring->sem.
1773      */
1774     if (!dead_type || !keyring->restrict_link ||
1775         keyring->restrict_link->keytype != dead_type) {
1776         kleave(" [no restriction gc]");
1777         return;
1778     }
1779 
1780     /* Lock the keyring to ensure that a link is not in progress */
1781     down_write(&keyring->sem);
1782 
1783     keyres = keyring->restrict_link;
1784 
1785     keyres->check = restrict_link_reject;
1786 
1787     key_put(keyres->key);
1788     keyres->key = NULL;
1789     keyres->keytype = NULL;
1790 
1791     up_write(&keyring->sem);
1792 
1793     kleave(" [restriction gc]");
1794 }