| .. | .. | 
|---|
|  | 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 = | 
|---|