From: Andy Whitcroft Date: Wed, 16 Feb 2011 04:49:59 +0000 (+0000) Subject: ecryptfs: read on a directory should return EISDIR if not supported X-Git-Tag: v2.6.27.62~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1663b5e456b6dc59d02224f93bd36d4580b94dd5;p=thirdparty%2Fkernel%2Fstable.git ecryptfs: read on a directory should return EISDIR if not supported 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 Signed-off-by: Tyler Hicks Signed-off-by: Willy Tarreau --- diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index a6dc11b9378b3..c70772dd528b2 100644 --- a/fs/ecryptfs/file.c +++ b/fs/ecryptfs/file.c @@ -333,6 +333,7 @@ ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 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,