From cdfa4015b77cef8bedfc9aa4c10f2cdb99bb5c36 Mon Sep 17 00:00:00 2001 From: Tomoki Shirasawa Date: Tue, 12 Sep 2017 13:15:22 +0900 Subject: [PATCH] load_elf: check mckernel execution refs #758 --- executer/kernel/mcctrl/binfmt_mcexec.c | 3 +++ executer/kernel/mcctrl/driver.c | 10 ++++++++++ executer/kernel/mcctrl/mcctrl.h | 2 ++ 3 files changed, 15 insertions(+) diff --git a/executer/kernel/mcctrl/binfmt_mcexec.c b/executer/kernel/mcctrl/binfmt_mcexec.c index 6ad12857..2c48a5fc 100644 --- a/executer/kernel/mcctrl/binfmt_mcexec.c +++ b/executer/kernel/mcctrl/binfmt_mcexec.c @@ -78,6 +78,9 @@ static int load_elf(struct linux_binprm *bprm char *pbuf; const char *path; + if (mcctrl_os_alive() == -1) + return -ENOEXEC; + if(bprm->envc == 0) return -ENOEXEC; if(memcmp(elf_ex->e_ident, ELFMAG, SELFMAG) != 0) diff --git a/executer/kernel/mcctrl/driver.c b/executer/kernel/mcctrl/driver.c index af411169..67a330cc 100644 --- a/executer/kernel/mcctrl/driver.c +++ b/executer/kernel/mcctrl/driver.c @@ -185,6 +185,16 @@ int mcctrl_os_shutdown_notifier(int os_index) return 0; } +int mcctrl_os_alive() +{ + int i; + + for (i = 0; i < OS_MAX_MINOR; i++) + if (os[i]) + return i; + return -1; +} + static struct ihk_os_notifier_ops mcctrl_os_notifier_ops = { .boot = mcctrl_os_boot_notifier, .shutdown = mcctrl_os_shutdown_notifier, diff --git a/executer/kernel/mcctrl/mcctrl.h b/executer/kernel/mcctrl/mcctrl.h index b8ab3144..065afbfb 100644 --- a/executer/kernel/mcctrl/mcctrl.h +++ b/executer/kernel/mcctrl/mcctrl.h @@ -408,6 +408,8 @@ inline struct mcctrl_per_thread_data *mcctrl_get_per_thread_data( void __return_syscall(ihk_os_t os, struct ikc_scd_packet *packet, long ret, int stid); +int mcctrl_os_alive(void); + #define PROCFS_NAME_MAX 768 struct procfs_read {