diff options
author | Sage Weil <sage@newdream.net> | 2010-12-17 09:53:41 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-12-17 09:53:48 -0800 |
commit | 92cf765237e2787eb168096305c448caf25ac7f8 (patch) | |
tree | 089f6d5a0f979ca858295cbf616ee2e85a62680f /fs/ceph | |
parent | ab226e21ad34f6ef52e00d2ab399d2364b4cdfee (diff) | |
download | lwn-92cf765237e2787eb168096305c448caf25ac7f8.tar.gz lwn-92cf765237e2787eb168096305c448caf25ac7f8.zip |
ceph: fix null pointer dereference in ceph_init_dentry for nfs reexport
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>
Diffstat (limited to 'fs/ceph')
-rw-r--r-- | fs/ceph/dir.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 158c700fdca5..d902948a90d8 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -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; |