|
@@ -58,21 +58,20 @@ static int sig_handler_ignored(void __user *handler, int sig)
|
|
|
(handler == SIG_DFL && sig_kernel_ignore(sig));
|
|
|
}
|
|
|
|
|
|
-static int sig_task_ignored(struct task_struct *t, int sig,
|
|
|
- int from_ancestor_ns)
|
|
|
+static int sig_task_ignored(struct task_struct *t, int sig, bool force)
|
|
|
{
|
|
|
void __user *handler;
|
|
|
|
|
|
handler = sig_handler(t, sig);
|
|
|
|
|
|
if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) &&
|
|
|
- handler == SIG_DFL && !from_ancestor_ns)
|
|
|
+ handler == SIG_DFL && !force)
|
|
|
return 1;
|
|
|
|
|
|
return sig_handler_ignored(handler, sig);
|
|
|
}
|
|
|
|
|
|
-static int sig_ignored(struct task_struct *t, int sig, int from_ancestor_ns)
|
|
|
+static int sig_ignored(struct task_struct *t, int sig, bool force)
|
|
|
{
|
|
|
/*
|
|
|
* Blocked signals are never ignored, since the
|
|
@@ -82,7 +81,7 @@ static int sig_ignored(struct task_struct *t, int sig, int from_ancestor_ns)
|
|
|
if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
|
|
|
return 0;
|
|
|
|
|
|
- if (!sig_task_ignored(t, sig, from_ancestor_ns))
|
|
|
+ if (!sig_task_ignored(t, sig, force))
|
|
|
return 0;
|
|
|
|
|
|
/*
|
|
@@ -855,7 +854,7 @@ static void ptrace_trap_notify(struct task_struct *t)
|
|
|
* Returns true if the signal should be actually delivered, otherwise
|
|
|
* it should be dropped.
|
|
|
*/
|
|
|
-static int prepare_signal(int sig, struct task_struct *p, int from_ancestor_ns)
|
|
|
+static int prepare_signal(int sig, struct task_struct *p, bool force)
|
|
|
{
|
|
|
struct signal_struct *signal = p->signal;
|
|
|
struct task_struct *t;
|
|
@@ -915,7 +914,7 @@ static int prepare_signal(int sig, struct task_struct *p, int from_ancestor_ns)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return !sig_ignored(p, sig, from_ancestor_ns);
|
|
|
+ return !sig_ignored(p, sig, force);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1602,7 +1601,7 @@ int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group)
|
|
|
|
|
|
ret = 1; /* the signal is ignored */
|
|
|
result = TRACE_SIGNAL_IGNORED;
|
|
|
- if (!prepare_signal(sig, t, 0))
|
|
|
+ if (!prepare_signal(sig, t, false))
|
|
|
goto out;
|
|
|
|
|
|
ret = 0;
|