Lines Matching refs:mk

40 static void free_master_key(struct fscrypt_master_key *mk)  in free_master_key()  argument
44 wipe_master_key_secret(&mk->mk_secret); in free_master_key()
46 for (i = 0; i < ARRAY_SIZE(mk->mk_mode_keys); i++) in free_master_key()
47 crypto_free_skcipher(mk->mk_mode_keys[i]); in free_master_key()
49 key_put(mk->mk_users); in free_master_key()
50 kzfree(mk); in free_master_key()
77 const struct fscrypt_master_key *mk = key->payload.data[0]; in fscrypt_key_describe() local
79 if (!is_master_key_secret_present(&mk->mk_secret)) in fscrypt_key_describe()
242 static int allocate_master_key_users_keyring(struct fscrypt_master_key *mk) in allocate_master_key_users_keyring() argument
248 mk->mk_spec.u.identifier); in allocate_master_key_users_keyring()
256 mk->mk_users = keyring; in allocate_master_key_users_keyring()
264 static struct key *find_master_key_user(struct fscrypt_master_key *mk) in find_master_key_user() argument
268 format_mk_user_description(description, mk->mk_spec.u.identifier); in find_master_key_user()
269 return search_fscrypt_keyring(mk->mk_users, &key_type_fscrypt_user, in find_master_key_user()
279 static int add_master_key_user(struct fscrypt_master_key *mk) in add_master_key_user() argument
285 format_mk_user_description(description, mk->mk_spec.u.identifier); in add_master_key_user()
292 err = key_instantiate_and_link(mk_user, NULL, 0, mk->mk_users, NULL); in add_master_key_user()
303 static int remove_master_key_user(struct fscrypt_master_key *mk) in remove_master_key_user() argument
308 mk_user = find_master_key_user(mk); in remove_master_key_user()
311 err = key_unlink(mk->mk_users, mk_user); in remove_master_key_user()
325 struct fscrypt_master_key *mk; in add_new_master_key() local
330 mk = kzalloc(sizeof(*mk), GFP_KERNEL); in add_new_master_key()
331 if (!mk) in add_new_master_key()
334 mk->mk_spec = *mk_spec; in add_new_master_key()
336 move_master_key_secret(&mk->mk_secret, secret); in add_new_master_key()
337 init_rwsem(&mk->mk_secret_sem); in add_new_master_key()
339 refcount_set(&mk->mk_refcount, 1); /* secret is present */ in add_new_master_key()
340 INIT_LIST_HEAD(&mk->mk_decrypted_inodes); in add_new_master_key()
341 spin_lock_init(&mk->mk_decrypted_inodes_lock); in add_new_master_key()
344 err = allocate_master_key_users_keyring(mk); in add_new_master_key()
347 err = add_master_key_user(mk); in add_new_master_key()
366 err = key_instantiate_and_link(key, mk, sizeof(*mk), keyring, NULL); in add_new_master_key()
374 free_master_key(mk); in add_new_master_key()
380 static int add_existing_master_key(struct fscrypt_master_key *mk, in add_existing_master_key() argument
391 if (mk->mk_users) { in add_existing_master_key()
392 mk_user = find_master_key_user(mk); in add_existing_master_key()
402 rekey = !is_master_key_secret_present(&mk->mk_secret); in add_existing_master_key()
403 if (rekey && !refcount_inc_not_zero(&mk->mk_refcount)) in add_existing_master_key()
407 if (mk->mk_users) { in add_existing_master_key()
408 err = add_master_key_user(mk); in add_existing_master_key()
410 if (rekey && refcount_dec_and_test(&mk->mk_refcount)) in add_existing_master_key()
418 down_write(&mk->mk_secret_sem); in add_existing_master_key()
419 move_master_key_secret(&mk->mk_secret, secret); in add_existing_master_key()
420 up_write(&mk->mk_secret_sem); in add_existing_master_key()
586 struct fscrypt_master_key *mk; in fscrypt_verify_key_added() local
597 mk = key->payload.data[0]; in fscrypt_verify_key_added()
598 mk_user = find_master_key_user(mk); in fscrypt_verify_key_added()
631 static void evict_dentries_for_decrypted_inodes(struct fscrypt_master_key *mk) in evict_dentries_for_decrypted_inodes() argument
637 spin_lock(&mk->mk_decrypted_inodes_lock); in evict_dentries_for_decrypted_inodes()
639 list_for_each_entry(ci, &mk->mk_decrypted_inodes, ci_master_key_link) { in evict_dentries_for_decrypted_inodes()
648 spin_unlock(&mk->mk_decrypted_inodes_lock); in evict_dentries_for_decrypted_inodes()
654 spin_lock(&mk->mk_decrypted_inodes_lock); in evict_dentries_for_decrypted_inodes()
657 spin_unlock(&mk->mk_decrypted_inodes_lock); in evict_dentries_for_decrypted_inodes()
662 struct fscrypt_master_key *mk) in check_for_busy_inodes() argument
671 spin_lock(&mk->mk_decrypted_inodes_lock); in check_for_busy_inodes()
673 list_for_each(pos, &mk->mk_decrypted_inodes) in check_for_busy_inodes()
677 spin_unlock(&mk->mk_decrypted_inodes_lock); in check_for_busy_inodes()
684 list_first_entry(&mk->mk_decrypted_inodes, in check_for_busy_inodes()
690 spin_unlock(&mk->mk_decrypted_inodes_lock); in check_for_busy_inodes()
701 sb->s_id, busy_count, master_key_spec_type(&mk->mk_spec), in check_for_busy_inodes()
702 master_key_spec_len(&mk->mk_spec), (u8 *)&mk->mk_spec.u, in check_for_busy_inodes()
708 struct fscrypt_master_key *mk) in try_to_lock_encrypted_files() argument
733 evict_dentries_for_decrypted_inodes(mk); in try_to_lock_encrypted_files()
742 err2 = check_for_busy_inodes(sb, mk); in try_to_lock_encrypted_files()
774 struct fscrypt_master_key *mk; in do_remove_key() local
800 mk = key->payload.data[0]; in do_remove_key()
805 if (mk->mk_users && mk->mk_users->keys.nr_leaves_on_tree != 0) { in do_remove_key()
807 err = keyring_clear(mk->mk_users); in do_remove_key()
809 err = remove_master_key_user(mk); in do_remove_key()
814 if (mk->mk_users->keys.nr_leaves_on_tree != 0) { in do_remove_key()
830 if (is_master_key_secret_present(&mk->mk_secret)) { in do_remove_key()
831 down_write(&mk->mk_secret_sem); in do_remove_key()
832 wipe_master_key_secret(&mk->mk_secret); in do_remove_key()
833 dead = refcount_dec_and_test(&mk->mk_refcount); in do_remove_key()
834 up_write(&mk->mk_secret_sem); in do_remove_key()
846 err = try_to_lock_encrypted_files(sb, mk); in do_remove_key()
908 struct fscrypt_master_key *mk; in fscrypt_ioctl_get_key_status() local
932 mk = key->payload.data[0]; in fscrypt_ioctl_get_key_status()
935 if (!is_master_key_secret_present(&mk->mk_secret)) { in fscrypt_ioctl_get_key_status()
942 if (mk->mk_users) { in fscrypt_ioctl_get_key_status()
945 arg.user_count = mk->mk_users->keys.nr_leaves_on_tree; in fscrypt_ioctl_get_key_status()
946 mk_user = find_master_key_user(mk); in fscrypt_ioctl_get_key_status()