From 6becf0b8644c0536fa12faef3d023134dcb3a100 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Fri, 23 Sep 2005 11:25:28 +0000 Subject: [PATCH] fix --- ChangeLog | 4 ++++ kernel/dir.c | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index e8e5ab0..8c91f35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-09-23 Miklos Szeredi + + * Check for special node ID values in LOOKUP/MK* + 2005-09-22 Miklos Szeredi * Slight optimization in returning EINVAL error in case of an open diff --git a/kernel/dir.c b/kernel/dir.c index e8b2d0f..3428668 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -112,7 +112,9 @@ static int fuse_lookup_iget(struct inode *dir, struct dentry *entry, fuse_lookup_init(req, dir, entry, &outarg); request_send(fc, req); err = req->out.h.error; - if (!err) { + if (!err && outarg.nodeid == FUSE_ROOT_ID) + err = -EIO; + else if (!err && outarg.nodeid) { inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, &outarg.attr); if (!inode) { @@ -168,6 +170,10 @@ static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req, fuse_put_request(fc, req); return err; } + if (!outarg.nodeid || outarg.nodeid == FUSE_ROOT_ID) { + fuse_put_request(fc, req); + return -EIO; + } inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, &outarg.attr); if (!inode) { -- 2.30.2