diff options
author | Davi Arnaut <davi.arnaut@gmail.com> | 2005-11-07 03:59:36 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 10:53:39 -0500 |
commit | ce44eeb6906cf2b093b76ea69b952621712a4a3c (patch) | |
tree | 7fbf66bef211951dfac7c114de2bf3ae5fcb15a5 /fs/9p | |
parent | be586bab8bfbf5d429bdfcb6136bdde89583c5c4 (diff) |
[PATCH] V9FS: 'names_cache' memory leak
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>
Diffstat (limited to 'fs/9p')
-rw-r--r-- | fs/9p/v9fs.c | 6 | ||||
-rw-r--r-- | fs/9p/vfs_inode.c | 10 |
2 files changed, 8 insertions, 8 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c index 82303f3bf76f..418c3743fdee 100644 --- a/fs/9p/v9fs.c +++ b/fs/9p/v9fs.c | |||
@@ -266,7 +266,7 @@ v9fs_session_init(struct v9fs_session_info *v9ses, | |||
266 | 266 | ||
267 | v9ses->remotename = __getname(); | 267 | v9ses->remotename = __getname(); |
268 | if (!v9ses->remotename) { | 268 | if (!v9ses->remotename) { |
269 | putname(v9ses->name); | 269 | __putname(v9ses->name); |
270 | return -ENOMEM; | 270 | return -ENOMEM; |
271 | } | 271 | } |
272 | 272 | ||
@@ -411,8 +411,8 @@ void v9fs_session_close(struct v9fs_session_info *v9ses) | |||
411 | if (v9ses->transport) | 411 | if (v9ses->transport) |
412 | v9ses->transport->close(v9ses->transport); | 412 | v9ses->transport->close(v9ses->transport); |
413 | 413 | ||
414 | putname(v9ses->name); | 414 | __putname(v9ses->name); |
415 | putname(v9ses->remotename); | 415 | __putname(v9ses->remotename); |
416 | } | 416 | } |
417 | 417 | ||
418 | /** | 418 | /** |
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index 2b696ae6655a..be7288184fa9 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c | |||
@@ -1105,7 +1105,7 @@ static int v9fs_vfs_readlink(struct dentry *dentry, char __user * buffer, | |||
1105 | } | 1105 | } |
1106 | } | 1106 | } |
1107 | 1107 | ||
1108 | putname(link); | 1108 | __putname(link); |
1109 | return retval; | 1109 | return retval; |
1110 | } | 1110 | } |
1111 | 1111 | ||
@@ -1129,7 +1129,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
1129 | len = v9fs_readlink(dentry, link, strlen(link)); | 1129 | len = v9fs_readlink(dentry, link, strlen(link)); |
1130 | 1130 | ||
1131 | if (len < 0) { | 1131 | if (len < 0) { |
1132 | putname(link); | 1132 | __putname(link); |
1133 | link = ERR_PTR(len); | 1133 | link = ERR_PTR(len); |
1134 | } else | 1134 | } else |
1135 | link[len] = 0; | 1135 | link[len] = 0; |
@@ -1152,7 +1152,7 @@ static void v9fs_vfs_put_link(struct dentry *dentry, struct nameidata *nd, void | |||
1152 | 1152 | ||
1153 | dprintk(DEBUG_VFS, " %s %s\n", dentry->d_name.name, s); | 1153 | dprintk(DEBUG_VFS, " %s %s\n", dentry->d_name.name, s); |
1154 | if (!IS_ERR(s)) | 1154 | if (!IS_ERR(s)) |
1155 | putname(s); | 1155 | __putname(s); |
1156 | } | 1156 | } |
1157 | 1157 | ||
1158 | /** | 1158 | /** |
@@ -1228,7 +1228,7 @@ v9fs_vfs_link(struct dentry *old_dentry, struct inode *dir, | |||
1228 | FreeMem: | 1228 | FreeMem: |
1229 | kfree(mistat); | 1229 | kfree(mistat); |
1230 | kfree(fcall); | 1230 | kfree(fcall); |
1231 | putname(symname); | 1231 | __putname(symname); |
1232 | return retval; | 1232 | return retval; |
1233 | } | 1233 | } |
1234 | 1234 | ||
@@ -1319,7 +1319,7 @@ v9fs_vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) | |||
1319 | FreeMem: | 1319 | FreeMem: |
1320 | kfree(mistat); | 1320 | kfree(mistat); |
1321 | kfree(fcall); | 1321 | kfree(fcall); |
1322 | putname(symname); | 1322 | __putname(symname); |
1323 | 1323 | ||
1324 | return retval; | 1324 | return retval; |
1325 | } | 1325 | } |