| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /** |
|---|
| 2 | 3 | * eCryptfs: Linux filesystem encryption layer |
|---|
| 3 | 4 | * In-kernel key management code. Includes functions to parse and |
|---|
| .. | .. |
|---|
| 8 | 9 | * Author(s): Michael A. Halcrow <mhalcrow@us.ibm.com> |
|---|
| 9 | 10 | * Michael C. Thompson <mcthomps@us.ibm.com> |
|---|
| 10 | 11 | * Trevor S. Highland <trevor.highland@gmail.com> |
|---|
| 11 | | - * |
|---|
| 12 | | - * This program is free software; you can redistribute it and/or |
|---|
| 13 | | - * modify it under the terms of the GNU General Public License as |
|---|
| 14 | | - * published by the Free Software Foundation; either version 2 of the |
|---|
| 15 | | - * License, or (at your option) any later version. |
|---|
| 16 | | - * |
|---|
| 17 | | - * This program is distributed in the hope that it will be useful, but |
|---|
| 18 | | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 19 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|---|
| 20 | | - * General Public License for more details. |
|---|
| 21 | | - * |
|---|
| 22 | | - * You should have received a copy of the GNU General Public License |
|---|
| 23 | | - * along with this program; if not, write to the Free Software |
|---|
| 24 | | - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
|---|
| 25 | | - * 02111-1307, USA. |
|---|
| 26 | 12 | */ |
|---|
| 27 | 13 | |
|---|
| 28 | 14 | #include <crypto/hash.h> |
|---|
| .. | .. |
|---|
| 769 | 755 | } |
|---|
| 770 | 756 | |
|---|
| 771 | 757 | s->hash_desc->tfm = s->hash_tfm; |
|---|
| 772 | | - s->hash_desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP; |
|---|
| 773 | 758 | |
|---|
| 774 | 759 | rc = crypto_shash_digest(s->hash_desc, |
|---|
| 775 | 760 | (u8 *)s->auth_tok->token.password.session_key_encryption_key, |
|---|
| .. | .. |
|---|
| 853 | 838 | out_release_free_unlock: |
|---|
| 854 | 839 | crypto_free_shash(s->hash_tfm); |
|---|
| 855 | 840 | out_free_unlock: |
|---|
| 856 | | - kzfree(s->block_aligned_filename); |
|---|
| 841 | + kfree_sensitive(s->block_aligned_filename); |
|---|
| 857 | 842 | out_unlock: |
|---|
| 858 | 843 | mutex_unlock(s->tfm_mutex); |
|---|
| 859 | 844 | out: |
|---|
| .. | .. |
|---|
| 862 | 847 | key_put(auth_tok_key); |
|---|
| 863 | 848 | } |
|---|
| 864 | 849 | skcipher_request_free(s->skcipher_req); |
|---|
| 865 | | - kzfree(s->hash_desc); |
|---|
| 850 | + kfree_sensitive(s->hash_desc); |
|---|
| 866 | 851 | kfree(s); |
|---|
| 867 | 852 | return rc; |
|---|
| 868 | 853 | } |
|---|
| .. | .. |
|---|
| 1063 | 1048 | "rc = [%d]\n", __func__, rc); |
|---|
| 1064 | 1049 | goto out_free_unlock; |
|---|
| 1065 | 1050 | } |
|---|
| 1066 | | - while (s->decrypted_filename[s->i] != '\0' |
|---|
| 1067 | | - && s->i < s->block_aligned_filename_size) |
|---|
| 1051 | + |
|---|
| 1052 | + while (s->i < s->block_aligned_filename_size && |
|---|
| 1053 | + s->decrypted_filename[s->i] != '\0') |
|---|
| 1068 | 1054 | s->i++; |
|---|
| 1069 | 1055 | if (s->i == s->block_aligned_filename_size) { |
|---|
| 1070 | 1056 | printk(KERN_WARNING "%s: Invalid tag 70 packet; could not " |
|---|
| .. | .. |
|---|
| 1626 | 1612 | int rc = 0; |
|---|
| 1627 | 1613 | |
|---|
| 1628 | 1614 | (*auth_tok_key) = request_key(&key_type_user, sig, NULL); |
|---|
| 1629 | | - if (!(*auth_tok_key) || IS_ERR(*auth_tok_key)) { |
|---|
| 1615 | + if (IS_ERR(*auth_tok_key)) { |
|---|
| 1630 | 1616 | (*auth_tok_key) = ecryptfs_get_encrypted_key(sig); |
|---|
| 1631 | | - if (!(*auth_tok_key) || IS_ERR(*auth_tok_key)) { |
|---|
| 1617 | + if (IS_ERR(*auth_tok_key)) { |
|---|
| 1632 | 1618 | printk(KERN_ERR "Could not find key with description: [%s]\n", |
|---|
| 1633 | 1619 | sig); |
|---|
| 1634 | 1620 | rc = process_request_key_err(PTR_ERR(*auth_tok_key)); |
|---|
| .. | .. |
|---|
| 2218 | 2204 | if (mount_crypt_stat->global_default_cipher_key_size == 0) { |
|---|
| 2219 | 2205 | printk(KERN_WARNING "No key size specified at mount; " |
|---|
| 2220 | 2206 | "defaulting to [%d]\n", |
|---|
| 2221 | | - crypto_skcipher_default_keysize(tfm)); |
|---|
| 2207 | + crypto_skcipher_max_keysize(tfm)); |
|---|
| 2222 | 2208 | mount_crypt_stat->global_default_cipher_key_size = |
|---|
| 2223 | | - crypto_skcipher_default_keysize(tfm); |
|---|
| 2209 | + crypto_skcipher_max_keysize(tfm); |
|---|
| 2224 | 2210 | } |
|---|
| 2225 | 2211 | if (crypt_stat->key_size == 0) |
|---|
| 2226 | 2212 | crypt_stat->key_size = |
|---|