From 8cc423214cd76091611f167b3f2695295b814186 Mon Sep 17 00:00:00 2001 From: Olaf Kirch Date: Mon, 30 Aug 2004 20:36:39 -0700 Subject: [PATCH] [PATCH] Prevent memory leak in devpts 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 Signed-off-by: Linus Torvalds --- fs/devpts/inode.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 1d49ef4af3b6e..55ac11f70a049 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c @@ -179,8 +179,12 @@ 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; + 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); -- 2.53.0