| From 323ef68faf1bbd9b1e66aea268fd09d358d7e8ab Mon Sep 17 00:00:00 2001 |
| From: Andy Whitcroft <apw@canonical.com> |
| Date: Wed, 16 Feb 2011 04:49:59 +0000 |
| Subject: ecryptfs: read on a directory should return EISDIR if not supported |
| |
| From: Andy Whitcroft <apw@canonical.com> |
| |
| commit 323ef68faf1bbd9b1e66aea268fd09d358d7e8ab upstream. |
| |
| read() calls against a file descriptor connected to a directory are |
| incorrectly returning EINVAL rather than EISDIR: |
| |
| [EISDIR] |
| [XSI] [Option Start] The fildes argument refers to a directory and the |
| implementation does not allow the directory to be read using read() |
| or pread(). The readdir() function should be used instead. [Option End] |
| |
| This occurs because we do not have a .read operation defined for |
| ecryptfs directories. Connect this up to generic_read_dir(). |
| |
| BugLink: http://bugs.launchpad.net/bugs/719691 |
| Signed-off-by: Andy Whitcroft <apw@canonical.com> |
| Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com> |
| |
| --- |
| fs/ecryptfs/file.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/fs/ecryptfs/file.c |
| +++ b/fs/ecryptfs/file.c |
| @@ -323,6 +323,7 @@ ecryptfs_compat_ioctl(struct file *file, |
| |
| const struct file_operations ecryptfs_dir_fops = { |
| .readdir = ecryptfs_readdir, |
| + .read = generic_read_dir, |
| .unlocked_ioctl = ecryptfs_unlocked_ioctl, |
| #ifdef CONFIG_COMPAT |
| .compat_ioctl = ecryptfs_compat_ioctl, |