Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 169bd9ba authored by Eric Biggers's avatar Eric Biggers Committed by Jaegeuk Kim
Browse files

ubifs: switch to fscrypt_get_symlink()



Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 63498ca7
Loading
Loading
Loading
Loading
+2 −34
Original line number Diff line number Diff line
@@ -1662,49 +1662,17 @@ static const char *ubifs_get_link(struct dentry *dentry,
					    struct inode *inode,
					    struct delayed_call *done)
{
	int err;
	struct fscrypt_symlink_data *sd;
	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;

	if (!dentry)
		return ERR_PTR(-ECHILD);

	err = fscrypt_get_encryption_info(inode);
	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);
	return fscrypt_get_symlink(inode, ui->data, ui->data_len, done);
}

	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 = {
	.readpage       = ubifs_readpage,
	.writepage      = ubifs_writepage,