lkml.org 
[lkml]   [2010]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[24/89] ecryptfs: initialize private persistent file before dereferencing pointer
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Erez Zadok <ezk@cs.sunysb.edu>

    commit e27759d7a333d1f25d628c4f7caf845c51be51c2 upstream.

    Ecryptfs_open dereferences a pointer to the private lower file (the one
    stored in the ecryptfs inode), without checking if the pointer is NULL.
    Right afterward, it initializes that pointer if it is NULL. Swap order of
    statements to first initialize. Bug discovered by Duckjin Kang.

    Signed-off-by: Duckjin Kang <fromdj2k@gmail.com>
    Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
    Cc: Dustin Kirkland <kirkland@canonical.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/ecryptfs/file.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    --- a/fs/ecryptfs/file.c
    +++ b/fs/ecryptfs/file.c
    @@ -191,13 +191,6 @@ static int ecryptfs_open(struct inode *i
    | ECRYPTFS_ENCRYPTED);
    }
    mutex_unlock(&crypt_stat->cs_mutex);
    - if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY)
    - && !(file->f_flags & O_RDONLY)) {
    - rc = -EPERM;
    - printk(KERN_WARNING "%s: Lower persistent file is RO; eCryptfs "
    - "file must hence be opened RO\n", __func__);
    - goto out;
    - }
    if (!ecryptfs_inode_to_private(inode)->lower_file) {
    rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
    if (rc) {
    @@ -208,6 +201,13 @@ static int ecryptfs_open(struct inode *i
    goto out;
    }
    }
    + if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY)
    + && !(file->f_flags & O_RDONLY)) {
    + rc = -EPERM;
    + printk(KERN_WARNING "%s: Lower persistent file is RO; eCryptfs "
    + "file must hence be opened RO\n", __func__);
    + goto out;
    + }
    ecryptfs_set_file_lower(
    file, ecryptfs_inode_to_private(inode)->lower_file);
    if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) {



    \
     
     \ /
      Last update: 2010-03-31 02:33    [W:4.066 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site