Commit b39a9292 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

syscalls: Don't hide sigsetsize inside syscall itself

This brings hardness into syscall trasition to asm code,
pass this constants in callers.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 95b5c41a
......@@ -484,7 +484,7 @@ static int prepare_sigactions(int pid)
* A pure syscall is used, because glibc
* sigaction overwrites se_restorer.
*/
ret = sys_sigaction(sig, &act, &oact);
ret = sys_sigaction(sig, &act, &oact, sizeof(rt_sigset_t));
if (ret == -1) {
pr_err("%d: Can't restore sigaction: %m\n", pid);
goto err;
......
......@@ -159,9 +159,9 @@ static always_inline long sys_open(const char *filename, unsigned long flags, un
return syscall3(__NR_open, (unsigned long)filename, flags, mode);
}
static always_inline long sys_sigaction(int signum, const rt_sigaction_t *act, rt_sigaction_t *oldact)
static always_inline long sys_sigaction(int signum, const rt_sigaction_t *act, rt_sigaction_t *oldact, size_t sigsetsize)
{
return syscall4(__NR_rt_sigaction, signum, (unsigned long)act, (unsigned long)oldact, sizeof(rt_sigset_t));
return syscall4(__NR_rt_sigaction, signum, (unsigned long)act, (unsigned long)oldact, (unsigned long)sigsetsize);
}
static always_inline long sys_getitimer(int which, const struct itimerval *val)
......@@ -244,10 +244,10 @@ static always_inline long sys_rt_sigreturn(void)
}
static always_inline long sys_sigprocmask(int how, k_rtsigset_t *set,
k_rtsigset_t *old)
k_rtsigset_t *old, size_t sigsetsize)
{
return syscall4(__NR_rt_sigprocmask, how, (unsigned long)set,
(unsigned long)old, (unsigned long)sizeof(k_rtsigset_t));
(unsigned long)old, (unsigned long)sigsetsize);
}
static always_inline long sys_set_thread_area(user_desc_t *info)
......
......@@ -255,7 +255,7 @@ static int dump_sigact(parasite_status_t *st)
if (sig == SIGKILL || sig == SIGSTOP)
continue;
ret = sys_sigaction(sig, NULL, &act);
ret = sys_sigaction(sig, NULL, &act, sizeof(rt_sigset_t));
if (ret < 0) {
sys_write_msg("sys_sigaction failed\n");
SET_PARASITE_RET(st, ret);
......@@ -409,7 +409,7 @@ static int init(struct parasite_init_args *args)
}
ksigfillset(&to_block);
ret = sys_sigprocmask(SIG_SETMASK, &to_block, &old_blocked);
ret = sys_sigprocmask(SIG_SETMASK, &to_block, &old_blocked, sizeof(k_rtsigset_t));
if (ret < 0)
reset_blocked = ret;
else
......@@ -436,7 +436,7 @@ static int parasite_set_logfd(parasite_status_t *st)
static int fini(void)
{
if (reset_blocked == 1)
sys_sigprocmask(SIG_SETMASK, &old_blocked, NULL);
sys_sigprocmask(SIG_SETMASK, &old_blocked, NULL, sizeof(k_rtsigset_t));
sys_close(logfd);
sys_close(tsock);
brk_fini();
......
......@@ -349,9 +349,9 @@ long restore_task(struct task_restore_core_args *args)
rt_sigaction_t act;
task_entries = args->task_entries;
sys_sigaction(SIGCHLD, NULL, &act);
sys_sigaction(SIGCHLD, NULL, &act, sizeof(rt_sigset_t));
act.rt_sa_handler = sigchld_handler;
sys_sigaction(SIGCHLD, &act, NULL);
sys_sigaction(SIGCHLD, &act, NULL, sizeof(rt_sigset_t));
restorer_set_logfd(args->logfd);
......@@ -687,7 +687,7 @@ long restore_task(struct task_restore_core_args *args)
futex_wait_while(&args->task_entries->start, CR_STATE_RESTORE);
sys_sigaction(SIGCHLD, &args->sigchld_act, NULL);
sys_sigaction(SIGCHLD, &args->sigchld_act, NULL, sizeof(rt_sigset_t));
futex_dec_and_wake(&args->task_entries->nr_in_progress);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment