eCryptfs: fix lookup error for special files
When ecryptfs_lookup() is called against special files, eCryptfs generates the following errors because it tries to treat them like regular eCryptfs files. Error opening lower file for lower_dentry [0xffff810233a6f150], lower_mnt [0xffff810235bb4c80], and flags [0x8000] Error opening lower_file to read header region Error attempting to read the [user.ecryptfs] xattr from the lower file; return value = [-95] Valid metadata not found in header region or xattr region; treating file as unencrypted For instance, the problem can be reproduced by the steps below. # mkdir /root/crypt /mnt/crypt # mount -t ecryptfs /root/crypt /mnt/crypt # mknod /mnt/crypt/c0 c 0 0 # umount /mnt/crypt # mount -t ecryptfs /root/crypt /mnt/crypt # ls -l /mnt/crypt This patch fixes it by adding a check similar to directories and symlinks. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Acked-by: Michael Halcrow <mhalcrow@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
74e8f346d5
commit
df06846416
1 changed files with 4 additions and 0 deletions
|
@ -357,6 +357,10 @@ static struct dentry *ecryptfs_lookup(struct inode *dir, struct dentry *dentry,
|
|||
ecryptfs_printk(KERN_DEBUG, "Is a special file; returning\n");
|
||||
goto out;
|
||||
}
|
||||
if (special_file(lower_inode->i_mode)) {
|
||||
ecryptfs_printk(KERN_DEBUG, "Is a special file; returning\n");
|
||||
goto out;
|
||||
}
|
||||
if (!nd) {
|
||||
ecryptfs_printk(KERN_DEBUG, "We have a NULL nd, just leave"
|
||||
"as we *think* we are about to unlink\n");
|
||||
|
|
Loading…
Reference in a new issue