ceph: fix null pointer dereference in ceph_init_dentry for nfs reexport
authorSage Weil <sage@newdream.net>
Fri, 17 Dec 2010 17:53:41 +0000 (09:53 -0800)
committerSage Weil <sage@newdream.net>
Fri, 17 Dec 2010 17:53:48 +0000 (09:53 -0800)
The fh_to_dentry etc. methods use ceph_init_dentry(), which assumes that
d_parent is defined.  It isn't for those callers, so check!

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/dir.c

index 158c700..d902948 100644 (file)
@@ -40,7 +40,8 @@ int ceph_init_dentry(struct dentry *dentry)
        if (dentry->d_fsdata)
                return 0;
 
-       if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP)
+       if (dentry->d_parent == NULL ||   /* nfs fh_to_dentry */
+           ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP)
                dentry->d_op = &ceph_dentry_ops;
        else if (ceph_snap(dentry->d_parent->d_inode) == CEPH_SNAPDIR)
                dentry->d_op = &ceph_snapdir_dentry_ops;