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

Commit c1611a0f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ANDROID: mnt: Fix freeing of mount data"

parents d65650ad fcc4d3b9
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ static struct mount *alloc_vfsmnt(const char *name)
		mnt->mnt_count = 1;
		mnt->mnt_writers = 0;
#endif
		mnt->mnt.data = NULL;

		INIT_HLIST_NODE(&mnt->mnt_hash);
		INIT_LIST_HEAD(&mnt->mnt_child);
@@ -976,7 +977,6 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
	if (!mnt)
		return ERR_PTR(-ENOMEM);

	mnt->mnt.data = NULL;
	if (type->alloc_mnt_data) {
		mnt->mnt.data = type->alloc_mnt_data();
		if (!mnt->mnt.data) {
@@ -990,7 +990,6 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void

	root = mount_fs(type, flags, name, &mnt->mnt, data);
	if (IS_ERR(root)) {
		kfree(mnt->mnt.data);
		mnt_free_id(mnt);
		free_vfsmnt(mnt);
		return ERR_CAST(root);
@@ -1094,7 +1093,6 @@ static struct mount *clone_mnt(struct mount *old, struct dentry *root,
	return mnt;

 out_free:
	kfree(mnt->mnt.data);
	mnt_free_id(mnt);
	free_vfsmnt(mnt);
	return ERR_PTR(err);
+16 −0
Original line number Diff line number Diff line
@@ -104,12 +104,19 @@ static long sdcardfs_unlocked_ioctl(struct file *file, unsigned int cmd,
{
	long err = -ENOTTY;
	struct file *lower_file;
	const struct cred *saved_cred = NULL;
	struct dentry *dentry = file->f_path.dentry;
	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);

	lower_file = sdcardfs_lower_file(file);

	/* XXX: use vfs_ioctl if/when VFS exports it */
	if (!lower_file || !lower_file->f_op)
		goto out;

	/* save current_cred and override it */
	OVERRIDE_CRED(sbi, saved_cred, SDCARDFS_I(file_inode(file)));

	if (lower_file->f_op->unlocked_ioctl)
		err = lower_file->f_op->unlocked_ioctl(lower_file, cmd, arg);

@@ -117,6 +124,7 @@ static long sdcardfs_unlocked_ioctl(struct file *file, unsigned int cmd,
	if (!err)
		sdcardfs_copy_and_fix_attrs(file_inode(file),
				      file_inode(lower_file));
	REVERT_CRED(saved_cred);
out:
	return err;
}
@@ -127,15 +135,23 @@ static long sdcardfs_compat_ioctl(struct file *file, unsigned int cmd,
{
	long err = -ENOTTY;
	struct file *lower_file;
	const struct cred *saved_cred = NULL;
	struct dentry *dentry = file->f_path.dentry;
	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);

	lower_file = sdcardfs_lower_file(file);

	/* XXX: use vfs_ioctl if/when VFS exports it */
	if (!lower_file || !lower_file->f_op)
		goto out;

	/* save current_cred and override it */
	OVERRIDE_CRED(sbi, saved_cred, SDCARDFS_I(file_inode(file)));

	if (lower_file->f_op->compat_ioctl)
		err = lower_file->f_op->compat_ioctl(lower_file, cmd, arg);

	REVERT_CRED(saved_cred);
out:
	return err;
}