lkml.org 
[lkml]   [2008]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] eCryptfs: Remove retry loop in ecryptfs_readdir()
    The retry block in ecryptfs_readdir() has been in the eCryptfs code
    base for a while, apparently for no good reason. This loop could
    potentially run without terminating. This patch removes the loop,
    instead erroring out if vfs_readdir() on the lower file fails.

    Signed-off-by: Michael Halcrow <mhalcrow@us.ibm.com>
    Reported-by: Al Viro <viro@ZinIV.linux.org.uk>
    ---
    fs/ecryptfs/file.c | 17 ++++++++---------
    1 files changed, 8 insertions(+), 9 deletions(-)

    diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
    index 9244d65..eb3dc4c 100644
    --- a/fs/ecryptfs/file.c
    +++ b/fs/ecryptfs/file.c
    @@ -71,12 +71,11 @@ struct ecryptfs_getdents_callback {
    void *dirent;
    struct dentry *dentry;
    filldir_t filldir;
    - int err;
    int filldir_called;
    int entries_written;
    };

    -/* Inspired by generic filldir in fs/readir.c */
    +/* Inspired by generic filldir in fs/readdir.c */
    static int
    ecryptfs_filldir(void *dirent, const char *name, int namelen, loff_t offset,
    u64 ino, unsigned int d_type)
    @@ -125,18 +124,18 @@ static int ecryptfs_readdir(struct file *file, void *dirent, filldir_t filldir)
    buf.dirent = dirent;
    buf.dentry = file->f_path.dentry;
    buf.filldir = filldir;
    -retry:
    buf.filldir_called = 0;
    buf.entries_written = 0;
    - buf.err = 0;
    rc = vfs_readdir(lower_file, ecryptfs_filldir, (void *)&buf);
    - if (buf.err)
    - rc = buf.err;
    - if (buf.filldir_called && !buf.entries_written)
    - goto retry;
    file->f_pos = lower_file->f_pos;
    + if (rc < 0)
    + goto out;
    + if (buf.filldir_called && !buf.entries_written)
    + goto out;
    if (rc >= 0)
    - fsstack_copy_attr_atime(inode, lower_file->f_path.dentry->d_inode);
    + fsstack_copy_attr_atime(inode,
    + lower_file->f_path.dentry->d_inode);
    +out:
    return rc;
    }

    --
    1.5.3.6


    \
     
     \ /
      Last update: 2008-09-03 00:31    [W:0.021 / U:123.284 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site