From 67adc53af48882df24082452a58164360a5fd100 Mon Sep 17 00:00:00 2001 From: Wang ShaoBo Date: Wed, 24 Feb 2021 11:15:20 +0800 Subject: [PATCH] arm64/mpam: resctrl: Use resctrl_group_init_alloc() for default group hulk inclusion category: bugfix bugzilla: 34278 CVE: NA ------------------------------------------------- When we support configure different types of resources for a resource, the wrong history value will be updated in the default group after remounting. e.g. > mount -t resctrl resctrl /sys/fs/resctrl/ -o mbMax,mbMin && cd resctrl/ > echo 'MBMIN:0=2;1=2;2=2;3=2' > schemata > cat schemata L3:0=7fff;1=7fff;2=7fff;3=7fff MBMAX:0=100;1=100;2=100;3=100 MBMIN:0=2;1=2;2=2;3=2 > cd .. && umount /sys/fs/resctrl/ > mount -t resctrl resctrl /sys/fs/resctrl/ -o mbMax,mbMin && cd resctrl/ && cat schemata L3:0=7fff;1=7fff;2=7fff;3=7fff MBMAX:0=100;1=100;2=100;3=100 MBMIN:0=0;1=0;2=0;3=0 > echo 'MBMAX:0=10;1=10;2=10;3=10' > schemata > cat schemata L3:0=7fff;1=7fff;2=7fff;3=7fff MBMAX:0=10;1=10;2=10;3=10 MBMIN:0=2;1=2;2=2;3=2 #update error history value When writing schemata sysfile, call path like this: resctrl_group_schemata_write() -=> resctrl_update_groups_config() -=> resctrl_group_update_domains() -=> resctrl_group_update_domain_ctrls() { .../*refresh new_ctrl array of supported conf type once for each resource*/ } We should refresh new_ctrl field in struct resctrl_staged_config by resctrl_group_init_alloc() before calling resctrl_group_update_domain_ctrls(). Fixes: 58e843d94efe ("arm64/mpam: resctrl: Support priority and hardlimit(Memory bandwidth) configuration") Signed-off-by: Wang ShaoBo Reviewed-by: Jian Cheng Signed-off-by: Yang Yingliang Signed-off-by: Cheng Jian --- fs/resctrlfs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/resctrlfs.c b/fs/resctrlfs.c index 8b9803ffa6e6..6a51212afdac 100644 --- a/fs/resctrlfs.c +++ b/fs/resctrlfs.c @@ -375,6 +375,10 @@ static struct dentry *resctrl_mount(struct file_system_type *fs_type, goto out_schema; } + ret = resctrl_group_init_alloc(&resctrl_group_default); + if (ret < 0) + goto out_schema; + ret = resctrl_group_create_info_dir(resctrl_group_default.kn, &kn_info); if (ret) { dentry = ERR_PTR(ret); -- GitLab