From: Olaf Kirch There is a dentry refcount leak in devpts_get_tty. struct tty_struct *devpts_get_tty(int number) { struct dentry *dentry = get_node(number); struct tty_struct *tty; tty = (IS_ERR(dentry) || !dentry->d_inode) ? NULL : dentry->d_inode->u.generic_ip; up(&devpts_root->d_inode->i_sem); return tty; } The get_node function does a lookup on /dev/pts/ and returns the dentry, taking a reference. We should dput the dentry after extracting the tty pointer. Signed-off-by: Andrew Morton --- 25-akpm/fs/devpts/inode.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff -puN fs/devpts/inode.c~prevent-memory-leak-in-devpts fs/devpts/inode.c --- 25/fs/devpts/inode.c~prevent-memory-leak-in-devpts 2004-08-25 19:14:56.718113744 -0700 +++ 25-akpm/fs/devpts/inode.c 2004-08-25 19:14:56.722113136 -0700 @@ -178,9 +178,13 @@ struct tty_struct *devpts_get_tty(int nu { struct dentry *dentry = get_node(number); struct tty_struct *tty; - - tty = (IS_ERR(dentry) || !dentry->d_inode) ? NULL : - dentry->d_inode->u.generic_ip; + + tty = NULL; + if (!IS_ERR(dentry)) { + if (dentry->d_inode) + tty = dentry->d_inode->u.generic_ip; + dput(dentry); + } up(&devpts_root->d_inode->i_sem); _