mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
ubifs: switch to fscrypt_get_symlink()
Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
0e4dda2907
commit
81dd76b2a5
@ -1662,49 +1662,17 @@ static const char *ubifs_get_link(struct dentry *dentry,
|
|||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
struct delayed_call *done)
|
struct delayed_call *done)
|
||||||
{
|
{
|
||||||
int err;
|
|
||||||
struct fscrypt_symlink_data *sd;
|
|
||||||
struct ubifs_inode *ui = ubifs_inode(inode);
|
struct ubifs_inode *ui = ubifs_inode(inode);
|
||||||
struct fscrypt_str cstr;
|
|
||||||
struct fscrypt_str pstr;
|
|
||||||
|
|
||||||
if (!ubifs_crypt_is_encrypted(inode))
|
if (!IS_ENCRYPTED(inode))
|
||||||
return ui->data;
|
return ui->data;
|
||||||
|
|
||||||
if (!dentry)
|
if (!dentry)
|
||||||
return ERR_PTR(-ECHILD);
|
return ERR_PTR(-ECHILD);
|
||||||
|
|
||||||
err = fscrypt_get_encryption_info(inode);
|
return fscrypt_get_symlink(inode, ui->data, ui->data_len, done);
|
||||||
if (err)
|
|
||||||
return ERR_PTR(err);
|
|
||||||
|
|
||||||
sd = (struct fscrypt_symlink_data *)ui->data;
|
|
||||||
cstr.name = sd->encrypted_path;
|
|
||||||
cstr.len = le16_to_cpu(sd->len);
|
|
||||||
|
|
||||||
if (cstr.len == 0)
|
|
||||||
return ERR_PTR(-ENOENT);
|
|
||||||
|
|
||||||
if ((cstr.len + sizeof(struct fscrypt_symlink_data) - 1) > ui->data_len)
|
|
||||||
return ERR_PTR(-EIO);
|
|
||||||
|
|
||||||
err = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr);
|
|
||||||
if (err)
|
|
||||||
return ERR_PTR(err);
|
|
||||||
|
|
||||||
err = fscrypt_fname_disk_to_usr(inode, 0, 0, &cstr, &pstr);
|
|
||||||
if (err) {
|
|
||||||
fscrypt_fname_free_buffer(&pstr);
|
|
||||||
return ERR_PTR(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
pstr.name[pstr.len] = '\0';
|
|
||||||
|
|
||||||
set_delayed_call(done, kfree_link, pstr.name);
|
|
||||||
return pstr.name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const struct address_space_operations ubifs_file_address_operations = {
|
const struct address_space_operations ubifs_file_address_operations = {
|
||||||
.readpage = ubifs_readpage,
|
.readpage = ubifs_readpage,
|
||||||
.writepage = ubifs_writepage,
|
.writepage = ubifs_writepage,
|
||||||
|
Loading…
Reference in New Issue
Block a user