diff options
author | Peter Staubach <staubach@redhat.com> | 2005-11-07 11:59:42 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 18:53:39 +0300 |
commit | 6fdcc2162285a8fc96ab12ff85086c37bceaa494 (patch) | |
tree | 957c0a2c2c273f6f13d8b9f95412f71856b5d449 | |
parent | 5c7ad5104d8ecf2c3a6428d73748126e91b1a250 (diff) | |
download | linux-6fdcc2162285a8fc96ab12ff85086c37bceaa494.tar.xz |
[PATCH] memory leak in dentry_open()
There is a memory leak possible in dentry_open(). If get_empty_filp()
fails, then the references to dentry and mnt need to be released. The
attached patch adds the calls to dput() and mntput() to release these two
references.
Signed-off-by: Peter Staubach <staubach@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | fs/open.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/open.c b/fs/open.c index 8d06ec911fd9..2835f096c683 100644 --- a/fs/open.c +++ b/fs/open.c @@ -887,6 +887,10 @@ struct file *nameidata_to_filp(struct nameidata *nd, int flags) return filp; } +/* + * dentry_open() will have done dput(dentry) and mntput(mnt) if it returns an + * error. + */ struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags) { int error; @@ -894,8 +898,11 @@ struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags) error = -ENFILE; f = get_empty_filp(); - if (f == NULL) + if (f == NULL) { + dput(dentry); + mntput(mnt); return ERR_PTR(error); + } return __dentry_open(dentry, mnt, flags, f, NULL); } |