fix
authorMiklos Szeredi <miklos@szeredi.hu>
Fri, 23 Sep 2005 11:25:28 +0000 (11:25 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Fri, 23 Sep 2005 11:25:28 +0000 (11:25 +0000)
ChangeLog
kernel/dir.c

index e8e5ab0bc3db640526c2bbafb85832cb1c85ce20..8c91f35933570227e939bf1def99b5f8fef1987c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-09-23  Miklos Szeredi <miklos@szeredi.hu>
+
+       * Check for special node ID values in LOOKUP/MK*
+
 2005-09-22  Miklos Szeredi <miklos@szeredi.hu>
 
        * Slight optimization in returning EINVAL error in case of an open
index e8b2d0f969900cd9764667bcf9330b21c58ebd3f..34286687274167dd2a4872c57389e57f3adad6d8 100644 (file)
@@ -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) {