Loading fs/ubifs/file.c +2 −34 Original line number Diff line number Diff line Loading @@ -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, Loading Loading
fs/ubifs/file.c +2 −34 Original line number Diff line number Diff line Loading @@ -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, Loading