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

Commit e933424c authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6:
  eCryptfs: Fix encrypted file name lookup regression
  ecryptfs: properly mark init functions
  fs/ecryptfs: Return -ENOMEM on memory allocation failure
parents 8f2a0029 93c3fe40
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1793,7 +1793,7 @@ struct kmem_cache *ecryptfs_key_tfm_cache;
static struct list_head key_tfm_list;
struct mutex key_tfm_list_mutex;

int ecryptfs_init_crypto(void)
int __init ecryptfs_init_crypto(void)
{
	mutex_init(&key_tfm_list_mutex);
	INIT_LIST_HEAD(&key_tfm_list);
@@ -2169,7 +2169,6 @@ int ecryptfs_encrypt_and_encode_filename(
				(ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
				 + encoded_name_no_prefix_size);
			(*encoded_name)[(*encoded_name_size)] = '\0';
			(*encoded_name_size)++;
		} else {
			rc = -EOPNOTSUPP;
		}
+24 −7
Original line number Diff line number Diff line
@@ -349,7 +349,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,

/**
 * ecryptfs_new_lower_dentry
 * @ename: The name of the new dentry.
 * @name: The name of the new dentry.
 * @lower_dir_dentry: Parent directory of the new dentry.
 * @nd: nameidata from last lookup.
 *
@@ -386,20 +386,19 @@ ecryptfs_new_lower_dentry(struct qstr *name, struct dentry *lower_dir_dentry,
 * ecryptfs_lookup_one_lower
 * @ecryptfs_dentry: The eCryptfs dentry that we are looking up
 * @lower_dir_dentry: lower parent directory
 * @name: lower file name
 *
 * Get the lower dentry from vfs. If lower dentry does not exist yet,
 * create it.
 */
static struct dentry *
ecryptfs_lookup_one_lower(struct dentry *ecryptfs_dentry,
			  struct dentry *lower_dir_dentry)
			  struct dentry *lower_dir_dentry, struct qstr *name)
{
	struct nameidata nd;
	struct vfsmount *lower_mnt;
	struct qstr *name;
	int err;

	name = &ecryptfs_dentry->d_name;
	lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(
				    ecryptfs_dentry->d_parent));
	err = vfs_path_lookup(lower_dir_dentry, lower_mnt, name->name , 0, &nd);
@@ -434,6 +433,7 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
	size_t encrypted_and_encoded_name_size;
	struct ecryptfs_mount_crypt_stat *mount_crypt_stat = NULL;
	struct dentry *lower_dir_dentry, *lower_dentry;
	struct qstr lower_name;
	int rc = 0;

	ecryptfs_dentry->d_op = &ecryptfs_dops;
@@ -444,9 +444,17 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
		goto out_d_drop;
	}
	lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent);

	lower_name.name = ecryptfs_dentry->d_name.name;
	lower_name.len = ecryptfs_dentry->d_name.len;
	lower_name.hash = ecryptfs_dentry->d_name.hash;
	if (lower_dir_dentry->d_op && lower_dir_dentry->d_op->d_hash) {
		rc = lower_dir_dentry->d_op->d_hash(lower_dir_dentry,
						    &lower_name);
		if (rc < 0)
			goto out_d_drop;
	}
	lower_dentry = ecryptfs_lookup_one_lower(ecryptfs_dentry,
						 lower_dir_dentry);
						 lower_dir_dentry, &lower_name);
	if (IS_ERR(lower_dentry)) {
		rc = PTR_ERR(lower_dentry);
		ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_lower() returned "
@@ -471,8 +479,17 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
		       "filename; rc = [%d]\n", __func__, rc);
		goto out_d_drop;
	}
	lower_name.name = encrypted_and_encoded_name;
	lower_name.len = encrypted_and_encoded_name_size;
	lower_name.hash = full_name_hash(lower_name.name, lower_name.len);
	if (lower_dir_dentry->d_op && lower_dir_dentry->d_op->d_hash) {
		rc = lower_dir_dentry->d_op->d_hash(lower_dir_dentry,
						    &lower_name);
		if (rc < 0)
			goto out_d_drop;
	}
	lower_dentry = ecryptfs_lookup_one_lower(ecryptfs_dentry,
						 lower_dir_dentry);
						 lower_dir_dentry, &lower_name);
	if (IS_ERR(lower_dentry)) {
		rc = PTR_ERR(lower_dentry);
		ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_lower() returned "
+2 −0
Original line number Diff line number Diff line
@@ -515,6 +515,7 @@ ecryptfs_write_tag_70_packet(char *dest, size_t *remaining_bytes,
	if (!s) {
		printk(KERN_ERR "%s: Out of memory whilst trying to kmalloc "
		       "[%zd] bytes of kernel memory\n", __func__, sizeof(*s));
		rc = -ENOMEM;
		goto out;
	}
	s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
@@ -806,6 +807,7 @@ ecryptfs_parse_tag_70_packet(char **filename, size_t *filename_size,
	if (!s) {
		printk(KERN_ERR "%s: Out of memory whilst trying to kmalloc "
		       "[%zd] bytes of kernel memory\n", __func__, sizeof(*s));
		rc = -ENOMEM;
		goto out;
	}
	s->desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP;
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ static int ecryptfs_threadfn(void *ignored)
	return 0;
}

int ecryptfs_init_kthread(void)
int __init ecryptfs_init_kthread(void)
{
	int rc = 0;

+1 −1
Original line number Diff line number Diff line
@@ -473,7 +473,7 @@ int ecryptfs_wait_for_response(struct ecryptfs_msg_ctx *msg_ctx,
	return rc;
}

int ecryptfs_init_messaging(void)
int __init ecryptfs_init_messaging(void)
{
	int i;
	int rc = 0;
Loading