From 207eba93ea185a5c10897e1836c27258d00e32bc Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Thu, 18 Jul 2019 04:19:08 +0000 Subject: [PATCH] uti: syscall_backward: Use kmalloc area to pass syscall arguments Change-Id: I478a9b40b75f3d1d68c4446810a6236fe2f3a96c Fujitsu: POSTK_DEBUG_ARCH_DEP_106 Refs: #1320 --- executer/kernel/mcctrl/syscall.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/executer/kernel/mcctrl/syscall.c b/executer/kernel/mcctrl/syscall.c index 4dd285cf..0e3266b3 100644 --- a/executer/kernel/mcctrl/syscall.c +++ b/executer/kernel/mcctrl/syscall.c @@ -280,15 +280,16 @@ long syscall_backward(struct mcctrl_usrdata *usrdata, int num, struct mcctrl_per_proc_data *ppd; struct mcctrl_per_thread_data *ptd; unsigned long phys; - struct syscall_request _request[2]; - struct syscall_request *request; + struct syscall_request *request = NULL; int retry; - if (((unsigned long)_request ^ (unsigned long)(_request + 1)) & - ~(PAGE_SIZE -1)) - request = _request + 1; - else - request = _request; + request = kmalloc(sizeof(struct syscall_request), GFP_ATOMIC); + if (!request) { + printk("%s: ERROR: allocating request\n", __func__); + syscall_ret = -ENOMEM; + goto no_ppd; + } + request->number = num; request->args[0] = arg1; request->args[1] = arg2; @@ -303,8 +304,9 @@ long syscall_backward(struct mcctrl_usrdata *usrdata, int num, if (!ppd) { kprintf("%s: ERROR: no per-process structure for PID %d??\n", - __FUNCTION__, task_tgid_vnr(current)); - return -EINVAL; + __func__, task_tgid_vnr(current)); + syscall_ret = -EINVAL; + goto no_ppd; } ptd = mcctrl_get_per_thread_data(ppd, current); @@ -452,11 +454,13 @@ out: out_put_ppd: mcctrl_put_per_thread_data(ptd); pr_ptd("put", task_pid_vnr(current), ptd); - no_ptd: +no_ptd: dprintk("%s: tid: %d, syscall: %d, syscall_ret: %lx\n", __FUNCTION__, task_pid_vnr(current), num, syscall_ret); mcctrl_put_per_proc_data(ppd); +no_ppd: + kfree(request); return syscall_ret; }