aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/symlink.c
diff options
context:
space:
mode:
authorArmin Kuster <akuster@mvista.com>2009-04-29 07:29:59 -1000
committerGreg Kroah-Hartman <gregkh@suse.de>2009-06-15 21:30:23 -0700
commit557411eb2ce61ef5e87bd759a6f86881586df857 (patch)
tree4410ea3f6aea26157da3634b7c2c4cb9166d0fb7 /fs/sysfs/symlink.c
parentb22813b373749d0878e7140e9a6eadf182298709 (diff)
downloadkernel_samsung_smdk4412-557411eb2ce61ef5e87bd759a6f86881586df857.zip
kernel_samsung_smdk4412-557411eb2ce61ef5e87bd759a6f86881586df857.tar.gz
kernel_samsung_smdk4412-557411eb2ce61ef5e87bd759a6f86881586df857.tar.bz2
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/sysfs/symlink.c')
-rw-r--r--fs/sysfs/symlink.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
index a3ba217..1d897ad 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;
}