|
@@ -4297,11 +4297,9 @@ SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newna
|
|
|
return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname);
|
|
|
}
|
|
|
|
|
|
-int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link)
|
|
|
+int readlink_copy(char __user *buffer, int buflen, const char *link)
|
|
|
{
|
|
|
- int len;
|
|
|
-
|
|
|
- len = PTR_ERR(link);
|
|
|
+ int len = PTR_ERR(link);
|
|
|
if (IS_ERR(link))
|
|
|
goto out;
|
|
|
|
|
@@ -4313,7 +4311,7 @@ int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const c
|
|
|
out:
|
|
|
return len;
|
|
|
}
|
|
|
-EXPORT_SYMBOL(vfs_readlink);
|
|
|
+EXPORT_SYMBOL(readlink_copy);
|
|
|
|
|
|
/*
|
|
|
* A helper for ->readlink(). This should be used *ONLY* for symlinks that
|
|
@@ -4331,7 +4329,7 @@ int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
|
|
|
if (IS_ERR(cookie))
|
|
|
return PTR_ERR(cookie);
|
|
|
|
|
|
- res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd));
|
|
|
+ res = readlink_copy(buffer, buflen, nd_get_link(&nd));
|
|
|
if (dentry->d_inode->i_op->put_link)
|
|
|
dentry->d_inode->i_op->put_link(dentry, &nd, cookie);
|
|
|
return res;
|
|
@@ -4356,8 +4354,7 @@ static char *page_getlink(struct dentry * dentry, struct page **ppage)
|
|
|
int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
|
|
|
{
|
|
|
struct page *page = NULL;
|
|
|
- char *s = page_getlink(dentry, &page);
|
|
|
- int res = vfs_readlink(dentry,buffer,buflen,s);
|
|
|
+ int res = readlink_copy(buffer, buflen, page_getlink(dentry, &page));
|
|
|
if (page) {
|
|
|
kunmap(page);
|
|
|
page_cache_release(page);
|