Message ID | 1469209736-6490-4-git-send-email-bfields@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Jul 22, 2016 at 01:48:52PM -0400, J. Bruce Fields wrote: > From: "J. Bruce Fields" <bfields@redhat.com> > > I'm not sure why this was added. It doesn't seem necessary, and no > other caller does this. lookup_one_len() will explode if you call it for non-directory (== !d_can_lookup(), i.e. something without ->lookup()). So unless the callers do guarantee that check being true, it *is* needed. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Jul 24, 2016 at 01:22:06AM +0100, Al Viro wrote: > On Fri, Jul 22, 2016 at 01:48:52PM -0400, J. Bruce Fields wrote: > > From: "J. Bruce Fields" <bfields@redhat.com> > > > > I'm not sure why this was added. It doesn't seem necessary, and no > > other caller does this. > > lookup_one_len() will explode if you call it for non-directory (== > !d_can_lookup(), i.e. something without ->lookup()). So unless the callers > do guarantee that check being true, it *is* needed. Both callers call fh_verify(.,.,S_IFDIR,.), so at this point we know that i_mode & S_IFMT == S_IFDIR. Is there some odd case where that's insufficient? If so, I think there may be bugs elsewhere in nfsd. If not, I'll add a note to the changelog. Thanks for reminding me to check this, I hadn't thought of that as an "is this a directory" check, it makes more sense now. --b. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Jul 24, 2016 at 08:10:14AM -0400, J. Bruce Fields wrote: > On Sun, Jul 24, 2016 at 01:22:06AM +0100, Al Viro wrote: > > On Fri, Jul 22, 2016 at 01:48:52PM -0400, J. Bruce Fields wrote: > > > From: "J. Bruce Fields" <bfields@redhat.com> > > > > > > I'm not sure why this was added. It doesn't seem necessary, and no > > > other caller does this. > > > > lookup_one_len() will explode if you call it for non-directory (== > > !d_can_lookup(), i.e. something without ->lookup()). So unless the callers > > do guarantee that check being true, it *is* needed. > > Both callers call fh_verify(.,.,S_IFDIR,.), so at this point we know > that i_mode & S_IFMT == S_IFDIR. Is there some odd case where that's > insufficient? If so, I think there may be bugs elsewhere in nfsd. If > not, I'll add a note to the changelog. First of all, such objects do exist; they probably won't be encountered by nfsd and all instances I can think of are not writable, but... > Thanks for reminding me to check this, I hadn't thought of that as an > "is this a directory" check, it makes more sense now. I'd have turned that into d_can_lookup(fhp->fh_dentry), actually. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index fba8e7e521e0..7ae3b5a72a4d 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1169,9 +1169,6 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, dentry = fhp->fh_dentry; dirp = d_inode(dentry); - err = nfserr_notdir; - if (!dirp->i_op->lookup) - goto out; /* * Check whether the response file handle has been verified yet. * If it has, the parent directory should already be locked.