Avoid 'names_cache' memory leak with CONFIG_AUDITSYSCALL
authorLinus Torvalds <torvalds@g5.osdl.org>
Fri, 7 Oct 2005 04:54:21 +0000 (21:54 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 7 Oct 2005 04:54:21 +0000 (21:54 -0700)
The nameidata "last.name" is always allocated with "__getname()", and
should always be free'd with "__putname()".

Using "putname()" without the underscores will leak memory, because the
allocation will have been hidden from the AUDITSYSCALL code.

Arguably the real bug is that the AUDITSYSCALL code is really broken,
but in the meantime this fixes the problem people see.

Reported by Robert Derr, patch by Rick Lindsley.

Acked-by: Al Viro <viro@ftp.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/namei.c

index 043d587216b5a3f3354a75878827df61956facc4..aa62dbda93ac01234670658a315c5472552238aa 100644 (file)
@@ -1551,19 +1551,19 @@ do_link:
        if (nd->last_type != LAST_NORM)
                goto exit;
        if (nd->last.name[nd->last.len]) {
-               putname(nd->last.name);
+               __putname(nd->last.name);
                goto exit;
        }
        error = -ELOOP;
        if (count++==32) {
-               putname(nd->last.name);
+               __putname(nd->last.name);
                goto exit;
        }
        dir = nd->dentry;
        down(&dir->d_inode->i_sem);
        path.dentry = __lookup_hash(&nd->last, nd->dentry, nd);
        path.mnt = nd->mnt;
-       putname(nd->last.name);
+       __putname(nd->last.name);
        goto do_last;
 }