Lines Matching +full:cts +full:- +full:override

1 // SPDX-License-Identifier: GPL-2.0
19 .friendly_name = "AES-256-XTS",
27 .friendly_name = "AES-256-CBC-CTS",
28 .cipher_str = "cts(cbc(aes))",
34 .friendly_name = "AES-128-CBC-ESSIV",
42 .friendly_name = "AES-128-CBC-CTS",
43 .cipher_str = "cts(cbc(aes))",
49 .friendly_name = "SM4-XTS",
57 .friendly_name = "SM4-CBC-CTS",
58 .cipher_str = "cts(cbc(sm4))",
72 .friendly_name = "AES-256-HCTR2",
88 if (S_ISREG(inode->i_mode)) in select_encryption_mode()
91 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) in select_encryption_mode()
95 inode->i_ino, (inode->i_mode & S_IFMT)); in select_encryption_mode()
96 return ERR_PTR(-EINVAL); in select_encryption_mode()
107 tfm = crypto_alloc_sync_skcipher(mode->cipher_str, 0, in fscrypt_allocate_skcipher()
110 if (PTR_ERR(tfm) == -ENOENT) { in fscrypt_allocate_skcipher()
113 mode->friendly_name, mode->cipher_str); in fscrypt_allocate_skcipher()
114 return ERR_PTR(-ENOPKG); in fscrypt_allocate_skcipher()
117 mode->cipher_str, PTR_ERR(tfm)); in fscrypt_allocate_skcipher()
120 if (!xchg(&mode->logged_cryptoapi_impl, 1)) { in fscrypt_allocate_skcipher()
124 * performance problems by logging the ->cra_driver_name the in fscrypt_allocate_skcipher()
128 mode->friendly_name, in fscrypt_allocate_skcipher()
129 crypto_skcipher_driver_name(&tfm->base)); in fscrypt_allocate_skcipher()
131 if (WARN_ON_ONCE(crypto_sync_skcipher_ivsize(tfm) != mode->ivsize)) { in fscrypt_allocate_skcipher()
132 err = -EINVAL; in fscrypt_allocate_skcipher()
136 err = crypto_sync_skcipher_setkey(tfm, raw_key, mode->keysize); in fscrypt_allocate_skcipher()
148 * Prepare the crypto transform object or blk-crypto key in @prep_key, given the
149 * raw key, encryption mode (@ci->ci_mode), flag indicating which encryption
150 * implementation (fs-layer or blk-crypto) will be used (@ci->ci_inlinecrypt),
151 * and IV generation method (@ci->ci_policy.flags).
160 ci->ci_mode->keysize, in fscrypt_prepare_key()
163 tfm = fscrypt_allocate_skcipher(ci->ci_mode, raw_key, ci->ci_inode); in fscrypt_prepare_key()
168 * I.e., here we publish ->tfm with a RELEASE barrier so that in fscrypt_prepare_key()
170 * possible for per-mode keys, not for per-file keys. in fscrypt_prepare_key()
172 smp_store_release(&prep_key->tfm, tfm); in fscrypt_prepare_key()
176 /* Destroy a crypto transform object and/or blk-crypto key. */
180 crypto_free_sync_skcipher(prep_key->tfm); in fscrypt_destroy_prepared_key()
185 /* Given a per-file encryption key, set up the file's crypto transform object */
189 ci->ci_owns_key = true; in fscrypt_set_per_file_enc_key()
190 return fscrypt_prepare_key(&ci->ci_enc_key, raw_key, ci); in fscrypt_set_per_file_enc_key()
198 const struct inode *inode = ci->ci_inode; in setup_per_mode_enc_key()
199 const struct super_block *sb = inode->i_sb; in setup_per_mode_enc_key()
200 struct fscrypt_mode *mode = ci->ci_mode; in setup_per_mode_enc_key()
201 const u8 mode_num = mode - fscrypt_modes; in setup_per_mode_enc_key()
204 u8 hkdf_info[sizeof(mode_num) + sizeof(sb->s_uuid)]; in setup_per_mode_enc_key()
210 return -EINVAL; in setup_per_mode_enc_key()
212 if (mk->mk_secret.is_hw_wrapped && S_ISREG(inode->i_mode)) { in setup_per_mode_enc_key()
213 /* Using a hardware-wrapped key for file contents encryption */ in setup_per_mode_enc_key()
215 if (sb->s_flags & SB_INLINECRYPT) in setup_per_mode_enc_key()
216 fscrypt_warn(ci->ci_inode, in setup_per_mode_enc_key()
217 … "Hardware-wrapped key required, but no suitable inline encryption capabilities are available"); in setup_per_mode_enc_key()
219 fscrypt_warn(ci->ci_inode, in setup_per_mode_enc_key()
220 "Hardware-wrapped keys require inline encryption (-o inlinecrypt)"); in setup_per_mode_enc_key()
221 return -EINVAL; in setup_per_mode_enc_key()
228 ci->ci_enc_key = *prep_key; in setup_per_mode_enc_key()
239 mk->mk_secret.bytes, in setup_per_mode_enc_key()
240 mk->mk_secret.size, true, in setup_per_mode_enc_key()
248 BUILD_BUG_ON(sizeof(sb->s_uuid) != 16); in setup_per_mode_enc_key()
252 memcpy(&hkdf_info[hkdf_infolen], &sb->s_uuid, in setup_per_mode_enc_key()
253 sizeof(sb->s_uuid)); in setup_per_mode_enc_key()
254 hkdf_infolen += sizeof(sb->s_uuid); in setup_per_mode_enc_key()
256 fscrypt_hkdf_expand(&mk->mk_secret.hkdf, hkdf_context, hkdf_info, in setup_per_mode_enc_key()
257 hkdf_infolen, mode_key, mode->keysize); in setup_per_mode_enc_key()
259 memzero_explicit(mode_key, mode->keysize); in setup_per_mode_enc_key()
263 ci->ci_enc_key = *prep_key; in setup_per_mode_enc_key()
272 * application-specific information string.
275 * as a pair of 64-bit words. Therefore, on big endian CPUs we have to do an
282 fscrypt_hkdf_expand(&mk->mk_secret.hkdf, context, info, infolen, in fscrypt_derive_siphash_key()
285 BUILD_BUG_ON(ARRAY_SIZE(key->key) != 2); in fscrypt_derive_siphash_key()
286 le64_to_cpus(&key->key[0]); in fscrypt_derive_siphash_key()
287 le64_to_cpus(&key->key[1]); in fscrypt_derive_siphash_key()
294 ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE, in fscrypt_derive_dirhash_key()
295 &ci->ci_dirhash_key); in fscrypt_derive_dirhash_key()
296 ci->ci_dirhash_key_initialized = true; in fscrypt_derive_dirhash_key()
302 WARN_ON_ONCE(ci->ci_inode->i_ino == 0); in fscrypt_hash_inode_number()
303 WARN_ON_ONCE(!mk->mk_ino_hash_key_initialized); in fscrypt_hash_inode_number()
305 ci->ci_hashed_ino = (u32)siphash_1u64(ci->ci_inode->i_ino, in fscrypt_hash_inode_number()
306 &mk->mk_ino_hash_key); in fscrypt_hash_inode_number()
314 err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_32_keys, in fscrypt_setup_iv_ino_lblk_32_key()
320 if (!smp_load_acquire(&mk->mk_ino_hash_key_initialized)) { in fscrypt_setup_iv_ino_lblk_32_key()
324 if (mk->mk_ino_hash_key_initialized) in fscrypt_setup_iv_ino_lblk_32_key()
328 NULL, 0, &mk->mk_ino_hash_key); in fscrypt_setup_iv_ino_lblk_32_key()
330 smp_store_release(&mk->mk_ino_hash_key_initialized, true); in fscrypt_setup_iv_ino_lblk_32_key()
339 if (ci->ci_inode->i_ino) in fscrypt_setup_iv_ino_lblk_32_key()
350 if (mk->mk_secret.is_hw_wrapped && in fscrypt_setup_v2_file_key()
351 !(ci->ci_policy.v2.flags & (FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 | in fscrypt_setup_v2_file_key()
353 fscrypt_warn(ci->ci_inode, in fscrypt_setup_v2_file_key()
354 "Hardware-wrapped keys are only supported with IV_INO_LBLK policies"); in fscrypt_setup_v2_file_key()
355 return -EINVAL; in fscrypt_setup_v2_file_key()
358 if (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) { in fscrypt_setup_v2_file_key()
360 * DIRECT_KEY: instead of deriving per-file encryption keys, the in fscrypt_setup_v2_file_key()
361 * per-file nonce will be included in all the IVs. But unlike in fscrypt_setup_v2_file_key()
363 * with the master key directly but rather derive a per-mode in fscrypt_setup_v2_file_key()
367 err = setup_per_mode_enc_key(ci, mk, mk->mk_direct_keys, in fscrypt_setup_v2_file_key()
369 } else if (ci->ci_policy.v2.flags & in fscrypt_setup_v2_file_key()
377 err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_64_keys, in fscrypt_setup_v2_file_key()
380 } else if (ci->ci_policy.v2.flags & in fscrypt_setup_v2_file_key()
386 fscrypt_hkdf_expand(&mk->mk_secret.hkdf, in fscrypt_setup_v2_file_key()
388 ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE, in fscrypt_setup_v2_file_key()
389 derived_key, ci->ci_mode->keysize); in fscrypt_setup_v2_file_key()
391 memzero_explicit(derived_key, ci->ci_mode->keysize); in fscrypt_setup_v2_file_key()
413 * (but in practice we only need to consider @ci->ci_mode, since any other
415 * required key size over @ci->ci_mode). This allows AES-256-XTS keys to be
416 * derived from a 256-bit master key, which is cryptographically sufficient,
417 * rather than requiring a 512-bit master key which is unnecessarily long. (We
418 * still allow 512-bit master keys if the user chooses to use them, though.)
425 if (ci->ci_policy.version == FSCRYPT_POLICY_V1) in fscrypt_valid_master_key_size()
426 min_keysize = ci->ci_mode->keysize; in fscrypt_valid_master_key_size()
428 min_keysize = ci->ci_mode->security_strength; in fscrypt_valid_master_key_size()
430 if (mk->mk_secret.size < min_keysize) { in fscrypt_valid_master_key_size()
433 master_key_spec_type(&mk->mk_spec), in fscrypt_valid_master_key_size()
434 master_key_spec_len(&mk->mk_spec), in fscrypt_valid_master_key_size()
435 (u8 *)&mk->mk_spec.u, in fscrypt_valid_master_key_size()
436 mk->mk_secret.size, min_keysize); in fscrypt_valid_master_key_size()
445 * If the master key is found in the filesystem-level keyring, then it is
446 * returned in *mk_ret with its semaphore read-locked. This is needed to ensure
447 * that only one task links the fscrypt_inode_info into ->mk_decrypted_inodes
456 struct super_block *sb = ci->ci_inode->i_sb; in setup_file_encryption_key()
461 err = fscrypt_policy_to_key_spec(&ci->ci_policy, &mk_spec); in setup_file_encryption_key()
471 * Add the test_dummy_encryption key on-demand. In principle, in setup_file_encryption_key()
477 fscrypt_policies_equal(dummy_policy, &ci->ci_policy)) { in setup_file_encryption_key()
485 if (ci->ci_policy.version != FSCRYPT_POLICY_V1) in setup_file_encryption_key()
486 return -ENOKEY; in setup_file_encryption_key()
495 * to before the search of ->s_master_keys, since users in setup_file_encryption_key()
496 * shouldn't be able to override filesystem-level keys. in setup_file_encryption_key()
500 down_read(&mk->mk_sem); in setup_file_encryption_key()
502 if (!mk->mk_present) { in setup_file_encryption_key()
504 err = -ENOKEY; in setup_file_encryption_key()
509 err = -ENOKEY; in setup_file_encryption_key()
513 err = fscrypt_select_encryption_impl(ci, mk->mk_secret.is_hw_wrapped); in setup_file_encryption_key()
517 switch (ci->ci_policy.version) { in setup_file_encryption_key()
519 if (WARN_ON_ONCE(mk->mk_secret.is_hw_wrapped)) { in setup_file_encryption_key()
522 * that is hardware-wrapped isn't allowed. in setup_file_encryption_key()
524 err = -EINVAL; in setup_file_encryption_key()
527 err = fscrypt_setup_v1_file_key(ci, mk->mk_secret.bytes); in setup_file_encryption_key()
534 err = -EINVAL; in setup_file_encryption_key()
544 up_read(&mk->mk_sem); in setup_file_encryption_key()
556 if (ci->ci_direct_key) in put_crypt_info()
557 fscrypt_put_direct_key(ci->ci_direct_key); in put_crypt_info()
558 else if (ci->ci_owns_key) in put_crypt_info()
559 fscrypt_destroy_prepared_key(ci->ci_inode->i_sb, in put_crypt_info()
560 &ci->ci_enc_key); in put_crypt_info()
562 mk = ci->ci_master_key; in put_crypt_info()
570 spin_lock(&mk->mk_decrypted_inodes_lock); in put_crypt_info()
571 list_del(&ci->ci_master_key_link); in put_crypt_info()
572 spin_unlock(&mk->mk_decrypted_inodes_lock); in put_crypt_info()
573 fscrypt_put_master_key_activeref(ci->ci_inode->i_sb, mk); in put_crypt_info()
590 res = fscrypt_initialize(inode->i_sb); in fscrypt_setup_encryption_info()
596 return -ENOMEM; in fscrypt_setup_encryption_info()
598 crypt_info->ci_inode = inode; in fscrypt_setup_encryption_info()
599 crypt_info->ci_policy = *policy; in fscrypt_setup_encryption_info()
600 memcpy(crypt_info->ci_nonce, nonce, FSCRYPT_FILE_NONCE_SIZE); in fscrypt_setup_encryption_info()
602 mode = select_encryption_mode(&crypt_info->ci_policy, inode); in fscrypt_setup_encryption_info()
607 WARN_ON_ONCE(mode->ivsize > FSCRYPT_MAX_IV_SIZE); in fscrypt_setup_encryption_info()
608 crypt_info->ci_mode = mode; in fscrypt_setup_encryption_info()
610 crypt_info->ci_data_unit_bits = in fscrypt_setup_encryption_info()
611 fscrypt_policy_du_bits(&crypt_info->ci_policy, inode); in fscrypt_setup_encryption_info()
612 crypt_info->ci_data_units_per_block_bits = in fscrypt_setup_encryption_info()
613 inode->i_blkbits - crypt_info->ci_data_unit_bits; in fscrypt_setup_encryption_info()
632 crypt_info->ci_master_key = mk; in fscrypt_setup_encryption_info()
633 refcount_inc(&mk->mk_active_refs); in fscrypt_setup_encryption_info()
634 spin_lock(&mk->mk_decrypted_inodes_lock); in fscrypt_setup_encryption_info()
635 list_add(&crypt_info->ci_master_key_link, in fscrypt_setup_encryption_info()
636 &mk->mk_decrypted_inodes); in fscrypt_setup_encryption_info()
637 spin_unlock(&mk->mk_decrypted_inodes_lock); in fscrypt_setup_encryption_info()
644 up_read(&mk->mk_sem); in fscrypt_setup_encryption_info()
652 * fscrypt_get_encryption_info() - set up an inode's encryption key
662 * Note: unless the key setup was already done, this isn't %GFP_NOFS-safe. So
667 * distinguish these cases.) Also can return another -errno code.
678 res = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx)); in fscrypt_get_encryption_info()
680 if (res == -ERANGE && allow_unsupported) in fscrypt_get_encryption_info()
698 return -EINVAL; in fscrypt_get_encryption_info()
704 S_ISDIR(inode->i_mode)); in fscrypt_get_encryption_info()
706 if (res == -ENOPKG && allow_unsupported) /* Algorithm unavailable? */ in fscrypt_get_encryption_info()
708 if (res == -ENOKEY) in fscrypt_get_encryption_info()
714 * fscrypt_prepare_new_inode() - prepare to create a new inode in a directory
715 * @dir: a possibly-encrypted directory
716 * @inode: the new inode. ->i_mode and ->i_blkbits must be set already.
717 * ->i_ino doesn't need to be set yet.
724 * This isn't %GFP_NOFS-safe, and therefore it should be called before starting
725 * any filesystem transaction to create the inode. For this reason, ->i_ino
731 * Return: 0 on success, -ENOKEY if a key needs to be set up for @dir or @inode
732 * but the needed master key is absent, or another -errno code
746 if (WARN_ON_ONCE(inode->i_blkbits == 0)) in fscrypt_prepare_new_inode()
747 return -EINVAL; in fscrypt_prepare_new_inode()
749 if (WARN_ON_ONCE(inode->i_mode == 0)) in fscrypt_prepare_new_inode()
750 return -EINVAL; in fscrypt_prepare_new_inode()
756 if (!S_ISREG(inode->i_mode) && in fscrypt_prepare_new_inode()
757 !S_ISDIR(inode->i_mode) && in fscrypt_prepare_new_inode()
758 !S_ISLNK(inode->i_mode)) in fscrypt_prepare_new_inode()
766 S_ISDIR(inode->i_mode)); in fscrypt_prepare_new_inode()
771 * fscrypt_put_encryption_info() - free most of an inode's fscrypt data
793 * fscrypt_free_inode() - free an inode's fscrypt data requiring RCU delay
801 if (IS_ENCRYPTED(inode) && S_ISLNK(inode->i_mode)) { in fscrypt_free_inode()
802 kfree(inode->i_link); in fscrypt_free_inode()
803 inode->i_link = NULL; in fscrypt_free_inode()
809 * fscrypt_drop_inode() - check whether the inode's master key has been removed
812 * Filesystems supporting fscrypt must call this from their ->drop_inode()
825 * was provided via the legacy mechanism of the process-subscribed in fscrypt_drop_inode()
828 if (!ci || !ci->ci_master_key) in fscrypt_drop_inode()
832 * With proper, non-racy use of FS_IOC_REMOVE_ENCRYPTION_KEY, all inodes in fscrypt_drop_inode()
837 if (inode->i_state & I_DIRTY_ALL) in fscrypt_drop_inode()
841 * We can't take ->mk_sem here, since this runs in atomic context. in fscrypt_drop_inode()
842 * Therefore, ->mk_present can change concurrently, and our result may in fscrypt_drop_inode()
849 return !READ_ONCE(ci->ci_master_key->mk_present); in fscrypt_drop_inode()