diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 14:07:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 14:07:50 -0400 |
commit | aaab184276a6e20834f63735d433f94ef52a0497 (patch) | |
tree | 89469029763d1fe713960200ac16014fef7c2167 | |
parent | e52e713ec30a31e9a4663d9aebbaae5ec07466a6 (diff) | |
parent | a058bfbbeca576cf7c93ac4f16092f13f414434e (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6:
MAINTAINERS: Update eCryptfs mailing list
eCryptfs: Allow 2 scatterlist entries for encrypted filenames
eCryptfs: Clear i_nlink in rmdir
-rw-r--r-- | MAINTAINERS | 2 | ||||
-rw-r--r-- | fs/ecryptfs/inode.c | 2 | ||||
-rw-r--r-- | fs/ecryptfs/keystore.c | 46 |
3 files changed, 24 insertions, 26 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index a6562ba1dc35..a33b11560d3f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -2304,7 +2304,7 @@ F: net/bridge/netfilter/ebt*.c | |||
2304 | ECRYPT FILE SYSTEM | 2304 | ECRYPT FILE SYSTEM |
2305 | M: Tyler Hicks <tyhicks@linux.vnet.ibm.com> | 2305 | M: Tyler Hicks <tyhicks@linux.vnet.ibm.com> |
2306 | M: Dustin Kirkland <kirkland@canonical.com> | 2306 | M: Dustin Kirkland <kirkland@canonical.com> |
2307 | L: ecryptfs-devel@lists.launchpad.net | 2307 | L: ecryptfs@vger.kernel.org |
2308 | W: https://launchpad.net/ecryptfs | 2308 | W: https://launchpad.net/ecryptfs |
2309 | S: Supported | 2309 | S: Supported |
2310 | F: Documentation/filesystems/ecryptfs.txt | 2310 | F: Documentation/filesystems/ecryptfs.txt |
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 227b409b8406..bc116b9ffcf2 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -529,6 +529,8 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
529 | dget(lower_dentry); | 529 | dget(lower_dentry); |
530 | rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry); | 530 | rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry); |
531 | dput(lower_dentry); | 531 | dput(lower_dentry); |
532 | if (!rc && dentry->d_inode) | ||
533 | clear_nlink(dentry->d_inode); | ||
532 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); | 534 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); |
533 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; | 535 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; |
534 | unlock_dir(lower_dir_dentry); | 536 | unlock_dir(lower_dir_dentry); |
diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c index 03e609c45012..27a7fefb83eb 100644 --- a/fs/ecryptfs/keystore.c +++ b/fs/ecryptfs/keystore.c | |||
@@ -599,8 +599,8 @@ struct ecryptfs_write_tag_70_packet_silly_stack { | |||
599 | struct mutex *tfm_mutex; | 599 | struct mutex *tfm_mutex; |
600 | char *block_aligned_filename; | 600 | char *block_aligned_filename; |
601 | struct ecryptfs_auth_tok *auth_tok; | 601 | struct ecryptfs_auth_tok *auth_tok; |
602 | struct scatterlist src_sg; | 602 | struct scatterlist src_sg[2]; |
603 | struct scatterlist dst_sg; | 603 | struct scatterlist dst_sg[2]; |
604 | struct blkcipher_desc desc; | 604 | struct blkcipher_desc desc; |
605 | char iv[ECRYPTFS_MAX_IV_BYTES]; | 605 | char iv[ECRYPTFS_MAX_IV_BYTES]; |
606 | char hash[ECRYPTFS_TAG_70_DIGEST_SIZE]; | 606 | char hash[ECRYPTFS_TAG_70_DIGEST_SIZE]; |
@@ -816,23 +816,21 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, | |||
816 | memcpy(&s->block_aligned_filename[s->num_rand_bytes], filename, | 816 | memcpy(&s->block_aligned_filename[s->num_rand_bytes], filename, |
817 | filename_size); | 817 | filename_size); |
818 | rc = virt_to_scatterlist(s->block_aligned_filename, | 818 | rc = virt_to_scatterlist(s->block_aligned_filename, |
819 | s->block_aligned_filename_size, &s->src_sg, 1); | 819 | s->block_aligned_filename_size, s->src_sg, 2); |
820 | if (rc != 1) { | 820 | if (rc < 1) { |
821 | printk(KERN_ERR "%s: Internal error whilst attempting to " | 821 | printk(KERN_ERR "%s: Internal error whilst attempting to " |
822 | "convert filename memory to scatterlist; " | 822 | "convert filename memory to scatterlist; rc = [%d]. " |
823 | "expected rc = 1; got rc = [%d]. " | ||
824 | "block_aligned_filename_size = [%zd]\n", __func__, rc, | 823 | "block_aligned_filename_size = [%zd]\n", __func__, rc, |
825 | s->block_aligned_filename_size); | 824 | s->block_aligned_filename_size); |
826 | goto out_release_free_unlock; | 825 | goto out_release_free_unlock; |
827 | } | 826 | } |
828 | rc = virt_to_scatterlist(&dest[s->i], s->block_aligned_filename_size, | 827 | rc = virt_to_scatterlist(&dest[s->i], s->block_aligned_filename_size, |
829 | &s->dst_sg, 1); | 828 | s->dst_sg, 2); |
830 | if (rc != 1) { | 829 | if (rc < 1) { |
831 | printk(KERN_ERR "%s: Internal error whilst attempting to " | 830 | printk(KERN_ERR "%s: Internal error whilst attempting to " |
832 | "convert encrypted filename memory to scatterlist; " | 831 | "convert encrypted filename memory to scatterlist; " |
833 | "expected rc = 1; got rc = [%d]. " | 832 | "rc = [%d]. block_aligned_filename_size = [%zd]\n", |
834 | "block_aligned_filename_size = [%zd]\n", __func__, rc, | 833 | __func__, rc, s->block_aligned_filename_size); |
835 | s->block_aligned_filename_size); | ||
836 | goto out_release_free_unlock; | 834 | goto out_release_free_unlock; |
837 | } | 835 | } |
838 | /* The characters in the first block effectively do the job | 836 | /* The characters in the first block effectively do the job |
@@ -855,7 +853,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes, | |||
855 | mount_crypt_stat->global_default_fn_cipher_key_bytes); | 853 | mount_crypt_stat->global_default_fn_cipher_key_bytes); |
856 | goto out_release_free_unlock; | 854 | goto out_release_free_unlock; |
857 | } | 855 | } |
858 | rc = crypto_blkcipher_encrypt_iv(&s->desc, &s->dst_sg, &s->src_sg, | 856 | rc = crypto_blkcipher_encrypt_iv(&s->desc, s->dst_sg, s->src_sg, |
859 | s->block_aligned_filename_size); | 857 | s->block_aligned_filename_size); |
860 | if (rc) { | 858 | if (rc) { |
861 | printk(KERN_ERR "%s: Error attempting to encrypt filename; " | 859 | printk(KERN_ERR "%s: Error attempting to encrypt filename; " |
@@ -891,8 +889,8 @@ struct ecryptfs_parse_tag_70_packet_silly_stack { | |||
891 | struct mutex *tfm_mutex; | 889 | struct mutex *tfm_mutex; |
892 | char *decrypted_filename; | 890 | char *decrypted_filename; |
893 | struct ecryptfs_auth_tok *auth_tok; | 891 | struct ecryptfs_auth_tok *auth_tok; |
894 | struct scatterlist src_sg; | 892 | struct scatterlist src_sg[2]; |
895 | struct scatterlist dst_sg; | 893 | struct scatterlist dst_sg[2]; |
896 | struct blkcipher_desc desc; | 894 | struct blkcipher_desc desc; |
897 | char fnek_sig_hex[ECRYPTFS_SIG_SIZE_HEX + 1]; | 895 | char fnek_sig_hex[ECRYPTFS_SIG_SIZE_HEX + 1]; |
898 | char iv[ECRYPTFS_MAX_IV_BYTES]; | 896 | char iv[ECRYPTFS_MAX_IV_BYTES]; |
@@ -1008,13 +1006,12 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, | |||
1008 | } | 1006 | } |
1009 | mutex_lock(s->tfm_mutex); | 1007 | mutex_lock(s->tfm_mutex); |
1010 | rc = virt_to_scatterlist(&data[(*packet_size)], | 1008 | rc = virt_to_scatterlist(&data[(*packet_size)], |
1011 | s->block_aligned_filename_size, &s->src_sg, 1); | 1009 | s->block_aligned_filename_size, s->src_sg, 2); |
1012 | if (rc != 1) { | 1010 | if (rc < 1) { |
1013 | printk(KERN_ERR "%s: Internal error whilst attempting to " | 1011 | printk(KERN_ERR "%s: Internal error whilst attempting to " |
1014 | "convert encrypted filename memory to scatterlist; " | 1012 | "convert encrypted filename memory to scatterlist; " |
1015 | "expected rc = 1; got rc = [%d]. " | 1013 | "rc = [%d]. block_aligned_filename_size = [%zd]\n", |
1016 | "block_aligned_filename_size = [%zd]\n", __func__, rc, | 1014 | __func__, rc, s->block_aligned_filename_size); |
1017 | s->block_aligned_filename_size); | ||
1018 | goto out_unlock; | 1015 | goto out_unlock; |
1019 | } | 1016 | } |
1020 | (*packet_size) += s->block_aligned_filename_size; | 1017 | (*packet_size) += s->block_aligned_filename_size; |
@@ -1028,13 +1025,12 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, | |||
1028 | goto out_unlock; | 1025 | goto out_unlock; |
1029 | } | 1026 | } |
1030 | rc = virt_to_scatterlist(s->decrypted_filename, | 1027 | rc = virt_to_scatterlist(s->decrypted_filename, |
1031 | s->block_aligned_filename_size, &s->dst_sg, 1); | 1028 | s->block_aligned_filename_size, s->dst_sg, 2); |
1032 | if (rc != 1) { | 1029 | if (rc < 1) { |
1033 | printk(KERN_ERR "%s: Internal error whilst attempting to " | 1030 | printk(KERN_ERR "%s: Internal error whilst attempting to " |
1034 | "convert decrypted filename memory to scatterlist; " | 1031 | "convert decrypted filename memory to scatterlist; " |
1035 | "expected rc = 1; got rc = [%d]. " | 1032 | "rc = [%d]. block_aligned_filename_size = [%zd]\n", |
1036 | "block_aligned_filename_size = [%zd]\n", __func__, rc, | 1033 | __func__, rc, s->block_aligned_filename_size); |
1037 | s->block_aligned_filename_size); | ||
1038 | goto out_free_unlock; | 1034 | goto out_free_unlock; |
1039 | } | 1035 | } |
1040 | /* The characters in the first block effectively do the job of | 1036 | /* The characters in the first block effectively do the job of |
@@ -1065,7 +1061,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size, | |||
1065 | mount_crypt_stat->global_default_fn_cipher_key_bytes); | 1061 | mount_crypt_stat->global_default_fn_cipher_key_bytes); |
1066 | goto out_free_unlock; | 1062 | goto out_free_unlock; |
1067 | } | 1063 | } |
1068 | rc = crypto_blkcipher_decrypt_iv(&s->desc, &s->dst_sg, &s->src_sg, | 1064 | rc = crypto_blkcipher_decrypt_iv(&s->desc, s->dst_sg, s->src_sg, |
1069 | s->block_aligned_filename_size); | 1065 | s->block_aligned_filename_size); |
1070 | if (rc) { | 1066 | if (rc) { |
1071 | printk(KERN_ERR "%s: Error attempting to decrypt filename; " | 1067 | printk(KERN_ERR "%s: Error attempting to decrypt filename; " |