lkml.org 
[lkml]   [2002]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] Fix the handling of dentry on msdos_lookup() (1/4)
    From
    Date
    Hi,

    If d_splice_alias() doesn't find the alias dentry, it returns NULL.
    Then, msdos_lookup() dereference the NULL, and Oops.
    This patch fixes this.

    Side of vfat_lookup() is cleanup only.

    Please apply.
    --
    OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>

    diff -urN linux-2.5.18/fs/msdos/namei.c fat_dentry-2.5.18/fs/msdos/namei.c
    --- linux-2.5.18/fs/msdos/namei.c Sat May 25 16:52:08 2002
    +++ fat_dentry-2.5.18/fs/msdos/namei.c Sat May 25 17:09:22 2002
    @@ -222,22 +222,17 @@
    if (res)
    goto out;
    add:
    - if (inode) {
    - dentry = d_splice_alias(inode, dentry);
    - dentry->d_op = &msdos_dentry_operations;
    - } else {
    - d_add(dentry, inode);
    - dentry = NULL;
    - }
    res = 0;
    + dentry = d_splice_alias(inode, dentry);
    + if (dentry)
    + dentry->d_op = &msdos_dentry_operations;
    out:
    if (bh)
    fat_brelse(sb, bh);
    unlock_kernel();
    - if (res)
    - return ERR_PTR(res);
    - else
    + if (!res)
    return dentry;
    + return ERR_PTR(res);
    }

    /***** Creates a directory entry (name is already formatted). */
    diff -urN linux-2.5.18/fs/vfat/namei.c fat_dentry-2.5.18/fs/vfat/namei.c
    --- linux-2.5.18/fs/vfat/namei.c Sat May 25 16:52:14 2002
    +++ fat_dentry-2.5.18/fs/vfat/namei.c Sat May 25 17:09:22 2002
    @@ -1021,16 +1021,12 @@
    unlock_kernel();
    dentry->d_op = &vfat_dentry_ops[table];
    dentry->d_time = dentry->d_parent->d_inode->i_version;
    - if (inode) {
    - dentry = d_splice_alias(inode, dentry);
    - if (dentry) {
    - dentry->d_op = &vfat_dentry_ops[table];
    - dentry->d_time = dentry->d_parent->d_inode->i_version;
    - }
    - return dentry;
    + dentry = d_splice_alias(inode, dentry);
    + if (dentry) {
    + dentry->d_op = &vfat_dentry_ops[table];
    + dentry->d_time = dentry->d_parent->d_inode->i_version;
    }
    - d_add(dentry,inode);
    - return NULL;
    + return dentry;
    }

    int vfat_create(struct inode *dir,struct dentry* dentry,int mode)
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:26    [W:0.032 / U:30.728 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site