提交 6c024be5 编写于 作者: T Tang Yizhou 提交者: Yang Yingliang

share_pool: Add access control for sp_unshare_uva

ascend inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I4EUVI
CVE: NA

-------------------------------------------------

After removing the 'pid' parameter of sp_unshare_uva, we need to
implement a new access control for unshare uva (to task).
Signed-off-by: NTang Yizhou <tangyizhou@huawei.com>
Signed-off-by: NZhou Guanghui <zhouguanghui1@huawei.com>
Reviewed-by: NWeilong Chen <chenweilong@huawei.com>
Reviewed-by: NDing Tianhong <dingtianhong@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 08ab8789
...@@ -2717,6 +2717,11 @@ static int sp_unshare_uva(unsigned long uva, unsigned long size) ...@@ -2717,6 +2717,11 @@ static int sp_unshare_uva(unsigned long uva, unsigned long size)
} }
if (spa->type == SPA_TYPE_K2TASK) { if (spa->type == SPA_TYPE_K2TASK) {
if (!current->mm || spa->applier != current->tgid) {
pr_err_ratelimited("share pool: unshare uva(to task) no permission\n");
ret = -EPERM;
goto out_drop_area;
}
if (!spa->mm) { if (!spa->mm) {
pr_err_ratelimited("share pool: unshare uva(to task) failed, none spa owner\n"); pr_err_ratelimited("share pool: unshare uva(to task) failed, none spa owner\n");
...@@ -2761,11 +2766,7 @@ static int sp_unshare_uva(unsigned long uva, unsigned long size) ...@@ -2761,11 +2766,7 @@ static int sp_unshare_uva(unsigned long uva, unsigned long size)
pr_err("share pool: failed to unmap VA %pK when munmap in unshare uva\n", pr_err("share pool: failed to unmap VA %pK when munmap in unshare uva\n",
(void *)uva_aligned); (void *)uva_aligned);
} }
sp_update_process_stat(current, false, spa);
if (unlikely(!current->mm))
WARN(1, "share pool: unshare uva(to task) unexpected active kthread");
else
sp_update_process_stat(current, false, spa);
} else if (spa->type == SPA_TYPE_K2SPG) { } else if (spa->type == SPA_TYPE_K2SPG) {
down_read(&spa->spg->rw_lock); down_read(&spa->spg->rw_lock);
...@@ -2783,7 +2784,7 @@ static int sp_unshare_uva(unsigned long uva, unsigned long size) ...@@ -2783,7 +2784,7 @@ static int sp_unshare_uva(unsigned long uva, unsigned long size)
up_read(&spa->spg->rw_lock); up_read(&spa->spg->rw_lock);
pr_err_ratelimited("share pool: unshare uva(to group) failed, " pr_err_ratelimited("share pool: unshare uva(to group) failed, "
"caller process doesn't belong to target group\n"); "caller process doesn't belong to target group\n");
ret = -EINVAL; ret = -EPERM;
goto out_drop_area; goto out_drop_area;
} }
up_read(&spa->spg->rw_lock); up_read(&spa->spg->rw_lock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册