[PATCH] V9FS: 'names_cache' memory leak
Davi Arnaut [Mon, 7 Nov 2005 08:59:36 +0000 (00:59 -0800)]
Data allocated with "__getname()" should always be free'd with "__putname()"
because of the AUDITSYSCALL code.

Signed-off-by: Davi Arnaut <davi.arnaut@gmail.com>
Cc: <rminnich@lanl.gov>
Cc: Eric Van Hensbergen <ericvh@ericvh.myip.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

fs/9p/v9fs.c
fs/9p/vfs_inode.c

index 82303f3..418c374 100644 (file)
@@ -266,7 +266,7 @@ v9fs_session_init(struct v9fs_session_info *v9ses,
 
        v9ses->remotename = __getname();
        if (!v9ses->remotename) {
-               putname(v9ses->name);
+               __putname(v9ses->name);
                return -ENOMEM;
        }
 
@@ -411,8 +411,8 @@ void v9fs_session_close(struct v9fs_session_info *v9ses)
        if (v9ses->transport)
                v9ses->transport->close(v9ses->transport);
 
-       putname(v9ses->name);
-       putname(v9ses->remotename);
+       __putname(v9ses->name);
+       __putname(v9ses->remotename);
 }
 
 /**
index 2b696ae..be72881 100644 (file)
@@ -1105,7 +1105,7 @@ static int v9fs_vfs_readlink(struct dentry *dentry, char __user * buffer,
                }
        }
 
-       putname(link);
+       __putname(link);
        return retval;
 }
 
@@ -1129,7 +1129,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd)
                len = v9fs_readlink(dentry, link, strlen(link));
 
                if (len < 0) {
-                       putname(link);
+                       __putname(link);
                        link = ERR_PTR(len);
                } else
                        link[len] = 0;
@@ -1152,7 +1152,7 @@ static void v9fs_vfs_put_link(struct dentry *dentry, struct nameidata *nd, void
 
        dprintk(DEBUG_VFS, " %s %s\n", dentry->d_name.name, s);
        if (!IS_ERR(s))
-               putname(s);
+               __putname(s);
 }
 
 /**
@@ -1228,7 +1228,7 @@ v9fs_vfs_link(struct dentry *old_dentry, struct inode *dir,
       FreeMem:
        kfree(mistat);
        kfree(fcall);
-       putname(symname);
+       __putname(symname);
        return retval;
 }
 
@@ -1319,7 +1319,7 @@ v9fs_vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev)
       FreeMem:
        kfree(mistat);
        kfree(fcall);
-       putname(symname);
+       __putname(symname);
 
        return retval;
 }