From 45bc6a617a191e479b43264ee07e34af2b34cf29 Mon Sep 17 00:00:00 2001 From: tinhnt86 Date: Thu, 8 Oct 2020 19:24:53 +0700 Subject: [PATCH] __return_syscall: check input & fix unmap memory in error cases Change-Id: I5de3ab3acd46770518b79bdc6f1c2e00c1cd5096 --- executer/kernel/mcctrl/syscall.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/executer/kernel/mcctrl/syscall.c b/executer/kernel/mcctrl/syscall.c index 469065f1..1ae300d1 100644 --- a/executer/kernel/mcctrl/syscall.c +++ b/executer/kernel/mcctrl/syscall.c @@ -1841,14 +1841,23 @@ void __return_syscall(ihk_os_t os, struct ikc_scd_packet *packet, unsigned long phys; struct syscall_response *res; + if (!os || ihk_host_validate_os(os) || !packet) { + return; + } + phys = ihk_device_map_memory(ihk_os_to_dev(os), packet->resp_pa, sizeof(*res)); + if (!phys) { + return; + } + res = ihk_device_map_virtual(ihk_os_to_dev(os), phys, sizeof(*res), NULL, 0); if (!res) { printk("%s: ERROR: invalid response structure address\n", __FUNCTION__); + ihk_device_unmap_memory(ihk_os_to_dev(os), phys, sizeof(*res)); return; }