Lines Matching refs:mk

56 	struct fscrypt_master_key *mk =
64 kfree_sensitive(mk);
67 void fscrypt_put_master_key(struct fscrypt_master_key *mk)
69 if (!refcount_dec_and_test(&mk->mk_struct_refs))
76 WARN_ON(refcount_read(&mk->mk_active_refs) != 0);
77 key_put(mk->mk_users);
78 mk->mk_users = NULL;
79 call_rcu(&mk->mk_rcu_head, fscrypt_free_master_key);
82 void fscrypt_put_master_key_activeref(struct fscrypt_master_key *mk)
84 struct super_block *sb = mk->mk_sb;
88 if (!refcount_dec_and_test(&mk->mk_active_refs))
97 hlist_del_rcu(&mk->mk_node);
104 WARN_ON(is_master_key_secret_present(&mk->mk_secret));
105 WARN_ON(!list_empty(&mk->mk_decrypted_inodes));
108 fscrypt_destroy_prepared_key(&mk->mk_direct_keys[i]);
109 fscrypt_destroy_prepared_key(&mk->mk_iv_ino_lblk_64_keys[i]);
110 fscrypt_destroy_prepared_key(&mk->mk_iv_ino_lblk_32_keys[i]);
112 memzero_explicit(&mk->mk_ino_hash_key,
113 sizeof(mk->mk_ino_hash_key));
114 mk->mk_ino_hash_key_initialized = false;
117 fscrypt_put_master_key(mk);
227 struct fscrypt_master_key *mk;
230 hlist_for_each_entry_safe(mk, tmp, bucket, mk_node) {
239 WARN_ON(refcount_read(&mk->mk_active_refs) != 1);
240 WARN_ON(refcount_read(&mk->mk_struct_refs) != 1);
241 WARN_ON(!is_master_key_secret_present(&mk->mk_secret));
242 wipe_master_key_secret(&mk->mk_secret);
243 fscrypt_put_master_key_activeref(mk);
277 struct fscrypt_master_key *mk;
293 hlist_for_each_entry_rcu(mk, bucket, mk_node) {
294 if (mk->mk_spec.type ==
296 memcmp(mk->mk_spec.u.descriptor,
299 refcount_inc_not_zero(&mk->mk_struct_refs))
304 hlist_for_each_entry_rcu(mk, bucket, mk_node) {
305 if (mk->mk_spec.type ==
307 memcmp(mk->mk_spec.u.identifier,
310 refcount_inc_not_zero(&mk->mk_struct_refs))
315 mk = NULL;
318 return mk;
321 static int allocate_master_key_users_keyring(struct fscrypt_master_key *mk)
327 mk->mk_spec.u.identifier);
335 mk->mk_users = keyring;
343 static struct key *find_master_key_user(struct fscrypt_master_key *mk)
348 format_mk_user_description(description, mk->mk_spec.u.identifier);
354 keyref = keyring_search(make_key_ref(mk->mk_users, true /*possessed*/),
371 static int add_master_key_user(struct fscrypt_master_key *mk)
377 format_mk_user_description(description, mk->mk_spec.u.identifier);
384 err = key_instantiate_and_link(mk_user, NULL, 0, mk->mk_users, NULL);
395 static int remove_master_key_user(struct fscrypt_master_key *mk)
400 mk_user = find_master_key_user(mk);
403 err = key_unlink(mk->mk_users, mk_user);
417 struct fscrypt_master_key *mk;
420 mk = kzalloc(sizeof(*mk), GFP_KERNEL);
421 if (!mk)
424 mk->mk_sb = sb;
425 init_rwsem(&mk->mk_sem);
426 refcount_set(&mk->mk_struct_refs, 1);
427 mk->mk_spec = *mk_spec;
429 INIT_LIST_HEAD(&mk->mk_decrypted_inodes);
430 spin_lock_init(&mk->mk_decrypted_inodes_lock);
433 err = allocate_master_key_users_keyring(mk);
436 err = add_master_key_user(mk);
441 move_master_key_secret(&mk->mk_secret, secret);
442 refcount_set(&mk->mk_active_refs, 1); /* ->mk_secret is present */
445 hlist_add_head_rcu(&mk->mk_node,
451 fscrypt_put_master_key(mk);
457 static int add_existing_master_key(struct fscrypt_master_key *mk,
467 if (mk->mk_users) {
468 struct key *mk_user = find_master_key_user(mk);
476 err = add_master_key_user(mk);
482 if (!is_master_key_secret_present(&mk->mk_secret)) {
483 if (!refcount_inc_not_zero(&mk->mk_active_refs))
485 move_master_key_secret(&mk->mk_secret, secret);
496 struct fscrypt_master_key *mk;
501 mk = fscrypt_find_master_key(sb, mk_spec);
502 if (!mk) {
512 down_write(&mk->mk_sem);
513 err = add_existing_master_key(mk, secret);
514 up_write(&mk->mk_sem);
524 fscrypt_put_master_key(mk);
789 struct fscrypt_master_key *mk;
796 mk = fscrypt_find_master_key(sb, &mk_spec);
797 if (!mk) {
801 down_read(&mk->mk_sem);
802 mk_user = find_master_key_user(mk);
809 up_read(&mk->mk_sem);
810 fscrypt_put_master_key(mk);
836 static void evict_dentries_for_decrypted_inodes(struct fscrypt_master_key *mk)
842 spin_lock(&mk->mk_decrypted_inodes_lock);
844 list_for_each_entry(ci, &mk->mk_decrypted_inodes, ci_master_key_link) {
853 spin_unlock(&mk->mk_decrypted_inodes_lock);
859 spin_lock(&mk->mk_decrypted_inodes_lock);
862 spin_unlock(&mk->mk_decrypted_inodes_lock);
867 struct fscrypt_master_key *mk)
874 spin_lock(&mk->mk_decrypted_inodes_lock);
876 list_for_each(pos, &mk->mk_decrypted_inodes)
880 spin_unlock(&mk->mk_decrypted_inodes_lock);
887 list_first_entry(&mk->mk_decrypted_inodes,
892 spin_unlock(&mk->mk_decrypted_inodes_lock);
900 sb->s_id, busy_count, master_key_spec_type(&mk->mk_spec),
901 master_key_spec_len(&mk->mk_spec), (u8 *)&mk->mk_spec.u,
907 struct fscrypt_master_key *mk)
932 evict_dentries_for_decrypted_inodes(mk);
941 err2 = check_for_busy_inodes(sb, mk);
972 struct fscrypt_master_key *mk;
995 mk = fscrypt_find_master_key(sb, &arg.key_spec);
996 if (!mk)
998 down_write(&mk->mk_sem);
1001 if (mk->mk_users && mk->mk_users->keys.nr_leaves_on_tree != 0) {
1003 err = keyring_clear(mk->mk_users);
1005 err = remove_master_key_user(mk);
1007 up_write(&mk->mk_sem);
1010 if (mk->mk_users->keys.nr_leaves_on_tree != 0) {
1019 up_write(&mk->mk_sem);
1026 if (is_master_key_secret_present(&mk->mk_secret)) {
1027 wipe_master_key_secret(&mk->mk_secret);
1028 fscrypt_put_master_key_activeref(mk);
1031 inodes_remain = refcount_read(&mk->mk_active_refs) > 0;
1032 up_write(&mk->mk_sem);
1036 err = try_to_lock_encrypted_files(sb, mk);
1050 fscrypt_put_master_key(mk);
1097 struct fscrypt_master_key *mk;
1113 mk = fscrypt_find_master_key(sb, &arg.key_spec);
1114 if (!mk) {
1119 down_read(&mk->mk_sem);
1121 if (!is_master_key_secret_present(&mk->mk_secret)) {
1122 arg.status = refcount_read(&mk->mk_active_refs) > 0 ?
1130 if (mk->mk_users) {
1133 arg.user_count = mk->mk_users->keys.nr_leaves_on_tree;
1134 mk_user = find_master_key_user(mk);
1146 up_read(&mk->mk_sem);
1147 fscrypt_put_master_key(mk);