Signed-off-by: Erez Zadok <[EMAIL PROTECTED]>
---
 fs/unionfs/dentry.c |    6 +++++-
 fs/unionfs/lookup.c |    5 +++++
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/fs/unionfs/dentry.c b/fs/unionfs/dentry.c
index b207a6f..0e89308 100644
--- a/fs/unionfs/dentry.c
+++ b/fs/unionfs/dentry.c
@@ -151,8 +151,12 @@ static bool __unionfs_d_revalidate_one(struct dentry 
*dentry,
                        valid = false;
        }
 
-       if (!dentry->d_inode)
+       if (!dentry->d_inode ||
+           ibstart(dentry->d_inode) < 0 ||
+           ibend(dentry->d_inode) < 0) {
                valid = false;
+               goto out;
+       }
 
        if (valid) {
                /*
diff --git a/fs/unionfs/lookup.c b/fs/unionfs/lookup.c
index 85a85aa..b9ee072 100644
--- a/fs/unionfs/lookup.c
+++ b/fs/unionfs/lookup.c
@@ -225,6 +225,7 @@ struct dentry *unionfs_lookup_backend(struct dentry *dentry,
                wh_lower_dentry = NULL;
 
                /* Now do regular lookup; lookup foo */
+               BUG_ON(!lower_dir_dentry);
                lower_dentry = lookup_one_len(name, lower_dir_dentry, namelen);
                if (IS_ERR(lower_dentry)) {
                        dput(first_lower_dentry);
@@ -315,6 +316,10 @@ out_negative:
                        UNIONFS_I(dentry->d_inode)->stale = 1;
                goto out;
        }
+       if (!lower_dir_dentry) {
+               err = -ENOENT;
+               goto out;
+       }
        /* This should only happen if we found a whiteout. */
        if (first_dentry_offset == -1) {
                first_lower_dentry = lookup_one_len(name, lower_dir_dentry,
-- 
1.5.2.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to