Fix zpl_revalidate() NULL deref
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 22 Jan 2013 17:05:49 +0000 (09:05 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 22 Jan 2013 17:38:17 +0000 (09:38 -0800)
In zpl_revalidate() it's possible for the nameidata to be NULL
for kernels which still accept the parameter.  In particular,
lookup_one_len() calls d_revalidate() with a NULL nameidata.

Resolve the issue by checking for a NULL nameidata in which case
just set the flags to 0.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1226

module/zfs/zpl_inode.c

index 0f6f3a4..e406288 100644 (file)
@@ -396,7 +396,7 @@ static int
 #ifdef HAVE_D_REVALIDATE_NAMEIDATA
 zpl_revalidate(struct dentry *dentry, struct nameidata *nd)
 {
-       unsigned int flags = nd->flags;
+       unsigned int flags = (nd ? nd->flags : 0);
 #else
 zpl_revalidate(struct dentry *dentry, unsigned int flags)
 {