Commit e77762e8 authored by Hongbo Li's avatar Hongbo Li Committed by Gao Xiang
Browse files

erofs: using domain_id in the safer way



Either the existing fscache usecase or the upcoming page
cache sharing case, the `domain_id` should be protected as
sensitive information, so we use the safer helpers to allocate,
free and display domain_id.

Signed-off-by: default avatarHongbo Li <lihongbo22@huawei.com>
Reviewed-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
parent 78331814
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -128,8 +128,9 @@ device=%s Specify a path to an extra device to be used together.
directio               (For file-backed mounts) Use direct I/O to access backing
                       files, and asynchronous I/O will be enabled if supported.
fsid=%s                Specify a filesystem image ID for Fscache back-end.
domain_id=%s           Specify a domain ID in fscache mode so that different images
                       with the same blobs under a given domain ID can share storage.
domain_id=%s           Specify a trusted domain ID for fscache mode so that
                       different images with the same blobs, identified by blob IDs,
                       can share storage within the same trusted domain.
fsoffset=%llu          Specify block-aligned filesystem offset for the primary device.
===================    =========================================================

+2 −2
Original line number Diff line number Diff line
@@ -379,7 +379,7 @@ static void erofs_fscache_domain_put(struct erofs_domain *domain)
		}
		fscache_relinquish_volume(domain->volume, NULL, false);
		mutex_unlock(&erofs_domain_list_lock);
		kfree(domain->domain_id);
		kfree_sensitive(domain->domain_id);
		kfree(domain);
		return;
	}
@@ -446,7 +446,7 @@ static int erofs_fscache_init_domain(struct super_block *sb)
	sbi->domain = domain;
	return 0;
out:
	kfree(domain->domain_id);
	kfree_sensitive(domain->domain_id);
	kfree(domain);
	return err;
}
+4 −6
Original line number Diff line number Diff line
@@ -527,10 +527,8 @@ static int erofs_fc_parse_param(struct fs_context *fc,
			return -ENOMEM;
		break;
	case Opt_domain_id:
		kfree(sbi->domain_id);
		sbi->domain_id = kstrdup(param->string, GFP_KERNEL);
		if (!sbi->domain_id)
			return -ENOMEM;
		kfree_sensitive(sbi->domain_id);
		sbi->domain_id = no_free_ptr(param->string);
		break;
#else
	case Opt_fsid:
@@ -626,7 +624,7 @@ static void erofs_set_sysfs_name(struct super_block *sb)
{
	struct erofs_sb_info *sbi = EROFS_SB(sb);

	if (sbi->domain_id)
	if (sbi->domain_id && sbi->fsid)
		super_set_sysfs_name_generic(sb, "%s,%s", sbi->domain_id,
					     sbi->fsid);
	else if (sbi->fsid)
@@ -861,7 +859,7 @@ static void erofs_sb_free(struct erofs_sb_info *sbi)
{
	erofs_free_dev_context(sbi->devs);
	kfree(sbi->fsid);
	kfree(sbi->domain_id);
	kfree_sensitive(sbi->domain_id);
	if (sbi->dif0.file)
		fput(sbi->dif0.file);
	kfree(sbi->volume_name);