Lines Matching refs:dk
155 static void free_direct_key(struct fscrypt_direct_key *dk)
157 if (dk) {
158 fscrypt_destroy_prepared_key(dk->dk_sb, &dk->dk_key);
159 kfree_sensitive(dk);
163 void fscrypt_put_direct_key(struct fscrypt_direct_key *dk)
165 if (!refcount_dec_and_lock(&dk->dk_refcount, &fscrypt_direct_keys_lock))
167 hash_del(&dk->dk_node);
170 free_direct_key(dk);
184 struct fscrypt_direct_key *dk;
197 hash_for_each_possible(fscrypt_direct_keys, dk, dk_node, hash_key) {
199 dk->dk_descriptor, FSCRYPT_KEY_DESCRIPTOR_SIZE) != 0)
201 if (ci->ci_mode != dk->dk_mode)
203 if (!fscrypt_is_key_prepared(&dk->dk_key, ci))
205 if (crypto_memneq(raw_key, dk->dk_raw, ci->ci_mode->keysize))
208 refcount_inc(&dk->dk_refcount);
211 return dk;
223 struct fscrypt_direct_key *dk;
227 dk = find_or_insert_direct_key(NULL, raw_key, ci);
228 if (dk)
229 return dk;
232 dk = kzalloc(sizeof(*dk), GFP_KERNEL);
233 if (!dk)
235 dk->dk_sb = ci->ci_inode->i_sb;
236 refcount_set(&dk->dk_refcount, 1);
237 dk->dk_mode = ci->ci_mode;
238 err = fscrypt_prepare_key(&dk->dk_key, raw_key, ci);
241 memcpy(dk->dk_descriptor, ci->ci_policy.v1.master_key_descriptor,
243 memcpy(dk->dk_raw, raw_key, ci->ci_mode->keysize);
245 return find_or_insert_direct_key(dk, raw_key, ci);
248 free_direct_key(dk);
256 struct fscrypt_direct_key *dk;
258 dk = fscrypt_get_direct_key(ci, raw_master_key);
259 if (IS_ERR(dk))
260 return PTR_ERR(dk);
261 ci->ci_direct_key = dk;
262 ci->ci_enc_key = dk->dk_key;