diff options
author | Tim Sally <tsally@atomicpeace.com> | 2012-07-12 19:10:24 -0400 |
---|---|---|
committer | Tyler Hicks <tyhicks@canonical.com> | 2012-07-13 20:20:34 -0400 |
commit | 5f5b331d5c21228a6519dcb793fc1629646c51a6 (patch) | |
tree | 8bbb3460ec1929a808acb0a707f16f5c1d0d435b /fs/ecryptfs | |
parent | 821f7494a77627fb1ab539591c57b22cdca702d6 (diff) |
eCryptfs: check for eCryptfs cipher support at mount
The issue occurs when eCryptfs is mounted with a cipher supported by
the crypto subsystem but not by eCryptfs. The mount succeeds and an
error does not occur until a write. This change checks for eCryptfs
cipher support at mount time.
Resolves Launchpad issue #338914, reported by Tyler Hicks in 03/2009.
https://bugs.launchpad.net/ecryptfs/+bug/338914
Signed-off-by: Tim Sally <tsally@atomicpeace.com>
Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
Diffstat (limited to 'fs/ecryptfs')
-rw-r--r-- | fs/ecryptfs/main.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c index df217dc9f1d9..923f6aa09cb3 100644 --- a/fs/ecryptfs/main.c +++ b/fs/ecryptfs/main.c | |||
@@ -279,6 +279,7 @@ static int ecryptfs_parse_options(struct ecryptfs_sb_info *sbi, char *options, | |||
279 | char *fnek_src; | 279 | char *fnek_src; |
280 | char *cipher_key_bytes_src; | 280 | char *cipher_key_bytes_src; |
281 | char *fn_cipher_key_bytes_src; | 281 | char *fn_cipher_key_bytes_src; |
282 | u8 cipher_code; | ||
282 | 283 | ||
283 | *check_ruid = 0; | 284 | *check_ruid = 0; |
284 | 285 | ||
@@ -420,6 +421,18 @@ static int ecryptfs_parse_options(struct ecryptfs_sb_info *sbi, char *options, | |||
420 | && !fn_cipher_key_bytes_set) | 421 | && !fn_cipher_key_bytes_set) |
421 | mount_crypt_stat->global_default_fn_cipher_key_bytes = | 422 | mount_crypt_stat->global_default_fn_cipher_key_bytes = |
422 | mount_crypt_stat->global_default_cipher_key_size; | 423 | mount_crypt_stat->global_default_cipher_key_size; |
424 | |||
425 | cipher_code = ecryptfs_code_for_cipher_string( | ||
426 | mount_crypt_stat->global_default_cipher_name, | ||
427 | mount_crypt_stat->global_default_cipher_key_size); | ||
428 | if (!cipher_code) { | ||
429 | ecryptfs_printk(KERN_ERR, | ||
430 | "eCryptfs doesn't support cipher: %s", | ||
431 | mount_crypt_stat->global_default_cipher_name); | ||
432 | rc = -EINVAL; | ||
433 | goto out; | ||
434 | } | ||
435 | |||
423 | mutex_lock(&key_tfm_list_mutex); | 436 | mutex_lock(&key_tfm_list_mutex); |
424 | if (!ecryptfs_tfm_exists(mount_crypt_stat->global_default_cipher_name, | 437 | if (!ecryptfs_tfm_exists(mount_crypt_stat->global_default_cipher_name, |
425 | NULL)) { | 438 | NULL)) { |