Lines Matching refs:dk
154 static void free_direct_key(struct fscrypt_direct_key *dk)
156 if (dk) {
157 fscrypt_destroy_prepared_key(&dk->dk_key);
158 kfree_sensitive(dk);
162 void fscrypt_put_direct_key(struct fscrypt_direct_key *dk)
164 if (!refcount_dec_and_lock(&dk->dk_refcount, &fscrypt_direct_keys_lock))
166 hash_del(&dk->dk_node);
169 free_direct_key(dk);
183 struct fscrypt_direct_key *dk;
196 hash_for_each_possible(fscrypt_direct_keys, dk, dk_node, hash_key) {
198 dk->dk_descriptor, FSCRYPT_KEY_DESCRIPTOR_SIZE) != 0)
200 if (ci->ci_mode != dk->dk_mode)
202 if (!fscrypt_is_key_prepared(&dk->dk_key, ci))
204 if (crypto_memneq(raw_key, dk->dk_raw, ci->ci_mode->keysize))
207 refcount_inc(&dk->dk_refcount);
210 return dk;
222 struct fscrypt_direct_key *dk;
226 dk = find_or_insert_direct_key(NULL, raw_key, ci);
227 if (dk)
228 return dk;
231 dk = kzalloc(sizeof(*dk), GFP_KERNEL);
232 if (!dk)
234 refcount_set(&dk->dk_refcount, 1);
235 dk->dk_mode = ci->ci_mode;
236 err = fscrypt_prepare_key(&dk->dk_key, raw_key, ci);
239 memcpy(dk->dk_descriptor, ci->ci_policy.v1.master_key_descriptor,
241 memcpy(dk->dk_raw, raw_key, ci->ci_mode->keysize);
243 return find_or_insert_direct_key(dk, raw_key, ci);
246 free_direct_key(dk);
254 struct fscrypt_direct_key *dk;
256 dk = fscrypt_get_direct_key(ci, raw_master_key);
257 if (IS_ERR(dk))
258 return PTR_ERR(dk);
259 ci->ci_direct_key = dk;
260 ci->ci_enc_key = dk->dk_key;