From ad4a9b6fb56642d36c76abbeae62dc4e9a66b154 Mon Sep 17 00:00:00 2001 From: Xie XiuQi Date: Sun, 28 Apr 2019 22:18:11 +0800 Subject: [PATCH] arm64/mpam: unmap all previous address when failed hulk inclusion category: bugfix bugzilla: 14212 CVE: NA Signed-off-by: Xie XiuQi Reviewed-by: Hanjun Guo Signed-off-by: Yang Yingliang --- arch/arm64/kernel/mpam.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/arch/arm64/kernel/mpam.c b/arch/arm64/kernel/mpam.c index d0b4f6ab70ad..a83b43c9dcaa 100644 --- a/arch/arm64/kernel/mpam.c +++ b/arch/arm64/kernel/mpam.c @@ -101,6 +101,21 @@ struct mpam_node mpam_node_all[] = { MPAM_NODE(HHAALL3, MPAM_RESOURCE_MC, 0x200090ULL, 0xC1), }; +void mpam_nodes_unmap(void) +{ + int i; + size_t num_nodes = ARRAY_SIZE(mpam_node_all); + struct mpam_node *n; + + for (i = 0; i < num_nodes; i++) { + n = &mpam_node_all[i]; + if (n->base) { + iounmap(n->base); + n->base = NULL; + } + } +} + int mpam_nodes_init(void) { int i, ret = 0; @@ -111,6 +126,10 @@ int mpam_nodes_init(void) n = &mpam_node_all[i]; ret |= cpulist_parse(n->cpus_list, &n->cpu_mask); n->base = ioremap(n->addr, 0x10000); + if (!n->base) { + mpam_nodes_unmap(); + return -ENOMEM; + } } return ret; -- GitLab