Commit 077688a9 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] symlink 6/9: xfs

xfs switched to new scheme; leaks plugged.
parent faa1bb09
...@@ -67,6 +67,7 @@ ...@@ -67,6 +67,7 @@
#include "xfs_utils.h" #include "xfs_utils.h"
#include <linux/xattr.h> #include <linux/xattr.h>
#include <linux/namei.h>
/* /*
...@@ -419,13 +420,16 @@ linvfs_follow_link( ...@@ -419,13 +420,16 @@ linvfs_follow_link(
ASSERT(nd); ASSERT(nd);
link = (char *)kmalloc(MAXNAMELEN+1, GFP_KERNEL); link = (char *)kmalloc(MAXNAMELEN+1, GFP_KERNEL);
if (!link) if (!link) {
return -ENOMEM; nd_set_link(nd, ERR_PTR(-ENOMEM));
return 0;
}
uio = (uio_t *)kmalloc(sizeof(uio_t), GFP_KERNEL); uio = (uio_t *)kmalloc(sizeof(uio_t), GFP_KERNEL);
if (!uio) { if (!uio) {
kfree(link); kfree(link);
return -ENOMEM; nd_set_link(nd, ERR_PTR(-ENOMEM));
return 0;
} }
vp = LINVFS_GET_VP(dentry->d_inode); vp = LINVFS_GET_VP(dentry->d_inode);
...@@ -441,18 +445,22 @@ linvfs_follow_link( ...@@ -441,18 +445,22 @@ linvfs_follow_link(
VOP_READLINK(vp, uio, 0, NULL, error); VOP_READLINK(vp, uio, 0, NULL, error);
if (error) { if (error) {
kfree(uio);
kfree(link); kfree(link);
return -error; link = ERR_PTR(-error);
} else {
link[MAXNAMELEN - uio->uio_resid] = '\0';
} }
link[MAXNAMELEN - uio->uio_resid] = '\0';
kfree(uio); kfree(uio);
/* vfs_follow_link returns (-) errors */ nd_set_link(nd, link);
error = vfs_follow_link(nd, link); return 0;
kfree(link); }
return error;
static void linvfs_put_link(struct dentry *dentry, struct nameidata *nd)
{
char *s = nd_get_link(nd);
if (!IS_ERR(s))
kfree(s);
} }
#ifdef CONFIG_XFS_POSIX_ACL #ifdef CONFIG_XFS_POSIX_ACL
...@@ -692,6 +700,7 @@ struct inode_operations linvfs_dir_inode_operations = { ...@@ -692,6 +700,7 @@ struct inode_operations linvfs_dir_inode_operations = {
struct inode_operations linvfs_symlink_inode_operations = { struct inode_operations linvfs_symlink_inode_operations = {
.readlink = linvfs_readlink, .readlink = linvfs_readlink,
.follow_link = linvfs_follow_link, .follow_link = linvfs_follow_link,
.put_link = linvfs_put_link,
.permission = linvfs_permission, .permission = linvfs_permission,
.getattr = linvfs_getattr, .getattr = linvfs_getattr,
.setattr = linvfs_setattr, .setattr = linvfs_setattr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment