diff options
author | Armin Kuster <akuster@mvista.com> | 2009-04-29 07:29:59 -1000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-15 21:30:23 -0700 |
commit | 557411eb2ce61ef5e87bd759a6f86881586df857 (patch) | |
tree | 4410ea3f6aea26157da3634b7c2c4cb9166d0fb7 /fs | |
parent | b22813b373749d0878e7140e9a6eadf182298709 (diff) | |
download | kernel-common-557411eb2ce61ef5e87bd759a6f86881586df857.tar.gz kernel-common-557411eb2ce61ef5e87bd759a6f86881586df857.tar.bz2 kernel-common-557411eb2ce61ef5e87bd759a6f86881586df857.zip |
Sysfs: fix possible memleak in sysfs_follow_link
There is the possiblity of a memory leak if a page is allocated and if
sysfs_getlink() fails in the sysfs_follow_link.
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/sysfs/symlink.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c index a3ba217fbe74..1d897ad808e0 100644 --- a/fs/sysfs/symlink.c +++ b/fs/sysfs/symlink.c @@ -192,8 +192,11 @@ static void *sysfs_follow_link(struct dentry *dentry, struct nameidata *nd) { int error = -ENOMEM; unsigned long page = get_zeroed_page(GFP_KERNEL); - if (page) + if (page) { error = sysfs_getlink(dentry, (char *) page); + if (error < 0) + free_page((unsigned long)page); + } nd_set_link(nd, error ? ERR_PTR(error) : (char *)page); return NULL; } |