Lines Matching refs:keyring

78 static int keyring_instantiate(struct key *keyring,
80 static void keyring_revoke(struct key *keyring);
81 static void keyring_destroy(struct key *keyring);
82 static void keyring_describe(const struct key *keyring, struct seq_file *m);
83 static long keyring_read(const struct key *keyring,
109 static void keyring_publish_name(struct key *keyring) in keyring_publish_name() argument
113 if (keyring->description) { in keyring_publish_name()
114 bucket = keyring_hash(keyring->description); in keyring_publish_name()
121 list_add_tail(&keyring->name_link, in keyring_publish_name()
148 static int keyring_instantiate(struct key *keyring, in keyring_instantiate() argument
151 assoc_array_init(&keyring->keys); in keyring_instantiate()
153 keyring_publish_name(keyring); in keyring_instantiate()
385 static void keyring_destroy(struct key *keyring) in keyring_destroy() argument
387 if (keyring->description) { in keyring_destroy()
390 if (keyring->name_link.next != NULL && in keyring_destroy()
391 !list_empty(&keyring->name_link)) in keyring_destroy()
392 list_del(&keyring->name_link); in keyring_destroy()
397 assoc_array_destroy(&keyring->keys, &keyring_assoc_array_ops); in keyring_destroy()
403 static void keyring_describe(const struct key *keyring, struct seq_file *m) in keyring_describe() argument
405 if (keyring->description) in keyring_describe()
406 seq_puts(m, keyring->description); in keyring_describe()
410 if (key_is_instantiated(keyring)) { in keyring_describe()
411 if (keyring->keys.nr_leaves_on_tree != 0) in keyring_describe()
412 seq_printf(m, ": %lu", keyring->keys.nr_leaves_on_tree); in keyring_describe()
451 static long keyring_read(const struct key *keyring, in keyring_read() argument
458 kenter("{%d},,%zu", key_serial(keyring), buflen); in keyring_read()
463 nr_keys = keyring->keys.nr_leaves_on_tree; in keyring_read()
479 ret = assoc_array_iterate(&keyring->keys, keyring_read_iterator, &ctx); in keyring_read()
496 struct key *keyring; in keyring_alloc() local
499 keyring = key_alloc(&key_type_keyring, description, in keyring_alloc()
501 if (!IS_ERR(keyring)) { in keyring_alloc()
502 ret = key_instantiate_and_link(keyring, NULL, 0, dest, NULL); in keyring_alloc()
504 key_put(keyring); in keyring_alloc()
505 keyring = ERR_PTR(ret); in keyring_alloc()
509 return keyring; in keyring_alloc()
595 static int search_keyring(struct key *keyring, struct keyring_search_context *ctx) in search_keyring() argument
600 object = assoc_array_find(&keyring->keys, in search_keyring()
605 return assoc_array_iterate(&keyring->keys, ctx->iterator, ctx); in search_keyring()
612 static bool search_nested_keyrings(struct key *keyring, in search_nested_keyrings() argument
616 struct key *keyring; in search_nested_keyrings() member
628 keyring->serial, in search_nested_keyrings()
643 keyring_compare_object(keyring, &ctx->index_key)) { in search_nested_keyrings()
645 switch (ctx->iterator(keyring_key_to_ptr(keyring), ctx)) { in search_nested_keyrings()
659 kdebug("descend to %d", keyring->serial); in search_nested_keyrings()
660 if (keyring->flags & ((1 << KEY_FLAG_INVALIDATED) | in search_nested_keyrings()
667 if (search_keyring(keyring, ctx)) in search_nested_keyrings()
678 ptr = ACCESS_ONCE(keyring->keys.root); in search_nested_keyrings()
749 stack[sp].keyring = keyring; in search_nested_keyrings()
755 keyring = key; in search_nested_keyrings()
798 keyring = stack[sp].keyring; in search_nested_keyrings()
801 kdebug("ascend to %d [%d]", keyring->serial, slot); in search_nested_keyrings()
810 keyring->last_used_at = ctx->now.tv_sec; in search_nested_keyrings()
812 stack[--sp].keyring->last_used_at = ctx->now.tv_sec; in search_nested_keyrings()
853 struct key *keyring; in keyring_search_aux() local
860 keyring = key_ref_to_ptr(keyring_ref); in keyring_search_aux()
861 key_check(keyring); in keyring_search_aux()
863 if (keyring->type != &key_type_keyring) in keyring_search_aux()
874 if (search_nested_keyrings(keyring, ctx)) in keyring_search_aux()
889 key_ref_t keyring_search(key_ref_t keyring, in keyring_search() argument
911 key = keyring_search_aux(keyring, &ctx); in keyring_search()
936 struct key *keyring, *key; in find_key_to_update() local
939 keyring = key_ref_to_ptr(keyring_ref); in find_key_to_update()
942 keyring->serial, index_key->type->name, index_key->description); in find_key_to_update()
944 object = assoc_array_find(&keyring->keys, &keyring_assoc_array_ops, in find_key_to_update()
978 struct key *keyring; in find_keyring_by_name() local
991 list_for_each_entry(keyring, in find_keyring_by_name()
995 if (!kuid_has_mapping(current_user_ns(), keyring->user->uid)) in find_keyring_by_name()
998 if (test_bit(KEY_FLAG_REVOKED, &keyring->flags)) in find_keyring_by_name()
1001 if (strcmp(keyring->description, name) != 0) in find_keyring_by_name()
1005 key_permission(make_key_ref(keyring, 0), in find_keyring_by_name()
1012 if (!atomic_inc_not_zero(&keyring->usage)) in find_keyring_by_name()
1014 keyring->last_used_at = current_kernel_time().tv_sec; in find_keyring_by_name()
1019 keyring = ERR_PTR(-ENOKEY); in find_keyring_by_name()
1022 return keyring; in find_keyring_by_name()
1071 int __key_link_begin(struct key *keyring, in __key_link_begin() argument
1074 __acquires(&keyring->sem) in __key_link_begin()
1081 keyring->serial, index_key->type->name, index_key->description); in __key_link_begin()
1085 if (keyring->type != &key_type_keyring) in __key_link_begin()
1088 down_write(&keyring->sem); in __key_link_begin()
1091 if (test_bit(KEY_FLAG_REVOKED, &keyring->flags)) in __key_link_begin()
1102 edit = assoc_array_insert(&keyring->keys, in __key_link_begin()
1115 ret = key_payload_reserve(keyring, in __key_link_begin()
1116 keyring->datalen + KEYQUOTA_LINK_BYTES); in __key_link_begin()
1131 up_write(&keyring->sem); in __key_link_begin()
1142 int __key_link_check_live_key(struct key *keyring, struct key *key) in __key_link_check_live_key() argument
1147 return keyring_detect_cycle(keyring, key); in __key_link_check_live_key()
1172 void __key_link_end(struct key *keyring, in __key_link_end() argument
1175 __releases(&keyring->sem) in __key_link_end()
1179 kenter("%d,%s,", keyring->serial, index_key->type->name); in __key_link_end()
1186 key_payload_reserve(keyring, in __key_link_end()
1187 keyring->datalen - KEYQUOTA_LINK_BYTES); in __key_link_end()
1191 up_write(&keyring->sem); in __key_link_end()
1214 int key_link(struct key *keyring, struct key *key) in key_link() argument
1219 kenter("{%d,%d}", keyring->serial, atomic_read(&keyring->usage)); in key_link()
1221 key_check(keyring); in key_link()
1224 if (test_bit(KEY_FLAG_TRUSTED_ONLY, &keyring->flags) && in key_link()
1228 ret = __key_link_begin(keyring, &key->index_key, &edit); in key_link()
1230 kdebug("begun {%d,%d}", keyring->serial, atomic_read(&keyring->usage)); in key_link()
1231 ret = __key_link_check_live_key(keyring, key); in key_link()
1234 __key_link_end(keyring, &key->index_key, edit); in key_link()
1237 kleave(" = %d {%d,%d}", ret, keyring->serial, atomic_read(&keyring->usage)); in key_link()
1259 int key_unlink(struct key *keyring, struct key *key) in key_unlink() argument
1264 key_check(keyring); in key_unlink()
1267 if (keyring->type != &key_type_keyring) in key_unlink()
1270 down_write(&keyring->sem); in key_unlink()
1272 edit = assoc_array_delete(&keyring->keys, &keyring_assoc_array_ops, in key_unlink()
1283 key_payload_reserve(keyring, keyring->datalen - KEYQUOTA_LINK_BYTES); in key_unlink()
1287 up_write(&keyring->sem); in key_unlink()
1300 int keyring_clear(struct key *keyring) in keyring_clear() argument
1305 if (keyring->type != &key_type_keyring) in keyring_clear()
1308 down_write(&keyring->sem); in keyring_clear()
1310 edit = assoc_array_clear(&keyring->keys, &keyring_assoc_array_ops); in keyring_clear()
1316 key_payload_reserve(keyring, 0); in keyring_clear()
1320 up_write(&keyring->sem); in keyring_clear()
1330 static void keyring_revoke(struct key *keyring) in keyring_revoke() argument
1334 edit = assoc_array_clear(&keyring->keys, &keyring_assoc_array_ops); in keyring_revoke()
1338 key_payload_reserve(keyring, 0); in keyring_revoke()
1368 void keyring_gc(struct key *keyring, time_t limit) in keyring_gc() argument
1372 kenter("%x{%s}", keyring->serial, keyring->description ?: ""); in keyring_gc()
1374 if (keyring->flags & ((1 << KEY_FLAG_INVALIDATED) | in keyring_gc()
1380 result = assoc_array_iterate(&keyring->keys, in keyring_gc()
1391 down_write(&keyring->sem); in keyring_gc()
1392 assoc_array_gc(&keyring->keys, &keyring_assoc_array_ops, in keyring_gc()
1394 up_write(&keyring->sem); in keyring_gc()