LCOV - code coverage report
Current view: top level - kernel - signal.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 585 1837 31.8 %
Date: 2022-04-01 14:35:51 Functions: 58 191 30.4 %
Branches: 272 1229 22.1 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0-only
       2                 :            : /*
       3                 :            :  *  linux/kernel/signal.c
       4                 :            :  *
       5                 :            :  *  Copyright (C) 1991, 1992  Linus Torvalds
       6                 :            :  *
       7                 :            :  *  1997-11-02  Modified for POSIX.1b signals by Richard Henderson
       8                 :            :  *
       9                 :            :  *  2003-06-02  Jim Houston - Concurrent Computer Corp.
      10                 :            :  *              Changes to use preallocated sigqueue structures
      11                 :            :  *              to allow signals to be sent reliably.
      12                 :            :  */
      13                 :            : 
      14                 :            : #include <linux/slab.h>
      15                 :            : #include <linux/export.h>
      16                 :            : #include <linux/init.h>
      17                 :            : #include <linux/sched/mm.h>
      18                 :            : #include <linux/sched/user.h>
      19                 :            : #include <linux/sched/debug.h>
      20                 :            : #include <linux/sched/task.h>
      21                 :            : #include <linux/sched/task_stack.h>
      22                 :            : #include <linux/sched/cputime.h>
      23                 :            : #include <linux/file.h>
      24                 :            : #include <linux/fs.h>
      25                 :            : #include <linux/proc_fs.h>
      26                 :            : #include <linux/tty.h>
      27                 :            : #include <linux/binfmts.h>
      28                 :            : #include <linux/coredump.h>
      29                 :            : #include <linux/security.h>
      30                 :            : #include <linux/syscalls.h>
      31                 :            : #include <linux/ptrace.h>
      32                 :            : #include <linux/signal.h>
      33                 :            : #include <linux/signalfd.h>
      34                 :            : #include <linux/ratelimit.h>
      35                 :            : #include <linux/tracehook.h>
      36                 :            : #include <linux/capability.h>
      37                 :            : #include <linux/freezer.h>
      38                 :            : #include <linux/pid_namespace.h>
      39                 :            : #include <linux/nsproxy.h>
      40                 :            : #include <linux/user_namespace.h>
      41                 :            : #include <linux/uprobes.h>
      42                 :            : #include <linux/compat.h>
      43                 :            : #include <linux/cn_proc.h>
      44                 :            : #include <linux/compiler.h>
      45                 :            : #include <linux/posix-timers.h>
      46                 :            : #include <linux/livepatch.h>
      47                 :            : #include <linux/cgroup.h>
      48                 :            : #include <linux/audit.h>
      49                 :            : 
      50                 :            : #define CREATE_TRACE_POINTS
      51                 :            : #include <trace/events/signal.h>
      52                 :            : 
      53                 :            : #include <asm/param.h>
      54                 :            : #include <linux/uaccess.h>
      55                 :            : #include <asm/unistd.h>
      56                 :            : #include <asm/siginfo.h>
      57                 :            : #include <asm/cacheflush.h>
      58                 :            : 
      59                 :            : /*
      60                 :            :  * SLAB caches for signal bits.
      61                 :            :  */
      62                 :            : 
      63                 :            : static struct kmem_cache *sigqueue_cachep;
      64                 :            : 
      65                 :            : int print_fatal_signals __read_mostly;
      66                 :            : 
      67                 :      54705 : static void __user *sig_handler(struct task_struct *t, int sig)
      68                 :            : {
      69                 :      54705 :         return t->sighand->action[sig - 1].sa.sa_handler;
      70                 :            : }
      71                 :            : 
      72                 :      54705 : static inline bool sig_handler_ignored(void __user *handler, int sig)
      73                 :            : {
      74                 :            :         /* Is it explicitly or implicitly ignored? */
      75   [ +  +  +  + ]:      53655 :         return handler == SIG_IGN ||
      76   [ +  +  +  +  :      36036 :                (handler == SIG_DFL && sig_kernel_ignore(sig));
             +  -  -  + ]
      77                 :            : }
      78                 :            : 
      79                 :       7875 : static bool sig_task_ignored(struct task_struct *t, int sig, bool force)
      80                 :            : {
      81                 :       7875 :         void __user *handler;
      82                 :            : 
      83                 :       7875 :         handler = sig_handler(t, sig);
      84                 :            : 
      85                 :            :         /* SIGKILL and SIGSTOP may not be sent to the global init */
      86   [ -  +  -  -  :       7875 :         if (unlikely(is_global_init(t) && sig_kernel_only(sig)))
                   -  - ]
      87                 :            :                 return true;
      88                 :            : 
      89   [ -  +  -  - ]:       7875 :         if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) &&
      90   [ #  #  #  #  :          0 :             handler == SIG_DFL && !(force && sig_kernel_only(sig)))
                   #  # ]
      91                 :            :                 return true;
      92                 :            : 
      93                 :            :         /* Only allow kernel generated signals to this kthread */
      94   [ +  +  +  - ]:       7875 :         if (unlikely((t->flags & PF_KTHREAD) &&
      95                 :            :                      (handler == SIG_KTHREAD_KERNEL) && !force))
      96                 :            :                 return true;
      97                 :            : 
      98         [ +  - ]:      15750 :         return sig_handler_ignored(handler, sig);
      99                 :            : }
     100                 :            : 
     101                 :       9051 : static bool sig_ignored(struct task_struct *t, int sig, bool force)
     102                 :            : {
     103                 :            :         /*
     104                 :            :          * Blocked signals are never ignored, since the
     105                 :            :          * signal handler may change by the time it is
     106                 :            :          * unblocked.
     107                 :            :          */
     108   [ +  +  +  - ]:       9051 :         if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
     109                 :            :                 return false;
     110                 :            : 
     111                 :            :         /*
     112                 :            :          * Tracers may want to know about even ignored signal unless it
     113                 :            :          * is SIGKILL which can't be reported anyway but can be ignored
     114                 :            :          * by SIGNAL_UNKILLABLE task.
     115                 :            :          */
     116   [ -  +  -  - ]:       7875 :         if (t->ptrace && sig != SIGKILL)
     117                 :            :                 return false;
     118                 :            : 
     119                 :       7875 :         return sig_task_ignored(t, sig, force);
     120                 :            : }
     121                 :            : 
     122                 :            : /*
     123                 :            :  * Re-calculate pending state from the set of locally pending
     124                 :            :  * signals, globally pending signals, and blocked signals.
     125                 :            :  */
     126                 :     137526 : static inline bool has_pending_signals(sigset_t *signal, sigset_t *blocked)
     127                 :            : {
     128                 :     137526 :         unsigned long ready;
     129                 :     137526 :         long i;
     130                 :            : 
     131                 :     137526 :         switch (_NSIG_WORDS) {
     132                 :            :         default:
     133                 :            :                 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
     134                 :            :                         ready |= signal->sig[i] &~ blocked->sig[i];
     135                 :            :                 break;
     136                 :            : 
     137                 :            :         case 4: ready  = signal->sig[3] &~ blocked->sig[3];
     138                 :            :                 ready |= signal->sig[2] &~ blocked->sig[2];
     139                 :            :                 ready |= signal->sig[1] &~ blocked->sig[1];
     140                 :            :                 ready |= signal->sig[0] &~ blocked->sig[0];
     141                 :            :                 break;
     142                 :            : 
     143                 :            :         case 2: ready  = signal->sig[1] &~ blocked->sig[1];
     144                 :            :                 ready |= signal->sig[0] &~ blocked->sig[0];
     145                 :            :                 break;
     146                 :            : 
     147                 :     137526 :         case 1: ready  = signal->sig[0] &~ blocked->sig[0];
     148                 :            :         }
     149                 :     137526 :         return ready != 0;
     150                 :            : }
     151                 :            : 
     152                 :            : #define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
     153                 :            : 
     154                 :      68763 : static bool recalc_sigpending_tsk(struct task_struct *t)
     155                 :            : {
     156         [ +  - ]:      68763 :         if ((t->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) ||
     157         [ +  - ]:      68763 :             PENDING(&t->pending, &t->blocked) ||
     158   [ +  +  -  + ]:      68763 :             PENDING(&t->signal->shared_pending, &t->blocked) ||
     159                 :            :             cgroup_task_frozen(t)) {
     160                 :        378 :                 set_tsk_thread_flag(t, TIF_SIGPENDING);
     161                 :        378 :                 return true;
     162                 :            :         }
     163                 :            : 
     164                 :            :         /*
     165                 :            :          * We must never clear the flag in another thread, or in current
     166                 :            :          * when it's possible the current syscall is returning -ERESTART*.
     167                 :            :          * So we don't clear it here, and only callers who know they should do.
     168                 :            :          */
     169                 :            :         return false;
     170                 :            : }
     171                 :            : 
     172                 :            : /*
     173                 :            :  * After recalculating TIF_SIGPENDING, we need to make sure the task wakes up.
     174                 :            :  * This is superfluous when called on current, the wakeup is a harmless no-op.
     175                 :            :  */
     176                 :          0 : void recalc_sigpending_and_wake(struct task_struct *t)
     177                 :            : {
     178         [ #  # ]:          0 :         if (recalc_sigpending_tsk(t))
     179                 :          0 :                 signal_wake_up(t, 0);
     180                 :          0 : }
     181                 :            : 
     182                 :      68763 : void recalc_sigpending(void)
     183                 :            : {
     184   [ +  +  +  - ]:      68763 :         if (!recalc_sigpending_tsk(current) && !freezing(current) &&
     185                 :            :             !klp_patch_pending(current))
     186                 :      68385 :                 clear_thread_flag(TIF_SIGPENDING);
     187                 :            : 
     188                 :      68763 : }
     189                 :            : EXPORT_SYMBOL(recalc_sigpending);
     190                 :            : 
     191                 :      11067 : void calculate_sigpending(void)
     192                 :            : {
     193                 :            :         /* Have any signals or users of TIF_SIGPENDING been delayed
     194                 :            :          * until after fork?
     195                 :            :          */
     196                 :      11067 :         spin_lock_irq(&current->sighand->siglock);
     197                 :      11067 :         set_tsk_thread_flag(current, TIF_SIGPENDING);
     198                 :      11067 :         recalc_sigpending();
     199                 :      11067 :         spin_unlock_irq(&current->sighand->siglock);
     200                 :      11067 : }
     201                 :            : 
     202                 :            : /* Given the mask, find the first available signal that should be serviced. */
     203                 :            : 
     204                 :            : #define SYNCHRONOUS_MASK \
     205                 :            :         (sigmask(SIGSEGV) | sigmask(SIGBUS) | sigmask(SIGILL) | \
     206                 :            :          sigmask(SIGTRAP) | sigmask(SIGFPE) | sigmask(SIGSYS))
     207                 :            : 
     208                 :      78100 : int next_signal(struct sigpending *pending, sigset_t *mask)
     209                 :            : {
     210                 :      78100 :         unsigned long i, *s, *m, x;
     211                 :      78100 :         int sig = 0;
     212                 :            : 
     213                 :      78100 :         s = pending->signal.sig;
     214                 :      78100 :         m = mask->sig;
     215                 :            : 
     216                 :            :         /*
     217                 :            :          * Handle the first word specially: it contains the
     218                 :            :          * synchronous signals that need to be dequeued first.
     219                 :            :          */
     220                 :      78100 :         x = *s &~ *m;
     221         [ +  + ]:       5002 :         if (x) {
     222   [ -  +  -  + ]:       2795 :                 if (x & SYNCHRONOUS_MASK)
     223                 :          0 :                         x &= SYNCHRONOUS_MASK;
     224         [ +  - ]:       2795 :                 sig = ffz(~x) + 1;
     225                 :       1036 :                 return sig;
     226                 :            :         }
     227                 :            : 
     228                 :            :         switch (_NSIG_WORDS) {
     229                 :            :         default:
     230                 :            :                 for (i = 1; i < _NSIG_WORDS; ++i) {
     231                 :            :                         x = *++s &~ *++m;
     232                 :            :                         if (!x)
     233                 :            :                                 continue;
     234                 :            :                         sig = ffz(~x) + i*_NSIG_BPW + 1;
     235                 :            :                         break;
     236                 :            :                 }
     237                 :            :                 break;
     238                 :            : 
     239                 :            :         case 2:
     240                 :            :                 x = s[1] &~ m[1];
     241                 :            :                 if (!x)
     242                 :            :                         break;
     243                 :            :                 sig = ffz(~x) + _NSIG_BPW + 1;
     244                 :            :                 break;
     245                 :            : 
     246                 :            :         case 1:
     247                 :            :                 /* Nothing to do */
     248                 :            :                 break;
     249                 :            :         }
     250                 :            : 
     251                 :            :         return sig;
     252                 :            : }
     253                 :            : 
     254                 :          0 : static inline void print_dropped_signal(int sig)
     255                 :            : {
     256                 :          0 :         static DEFINE_RATELIMIT_STATE(ratelimit_state, 5 * HZ, 10);
     257                 :            : 
     258         [ #  # ]:          0 :         if (!print_fatal_signals)
     259                 :            :                 return;
     260                 :            : 
     261         [ #  # ]:          0 :         if (!__ratelimit(&ratelimit_state))
     262                 :            :                 return;
     263                 :            : 
     264                 :          0 :         pr_info("%s/%d: reached RLIMIT_SIGPENDING, dropped signal %d\n",
     265                 :            :                                 current->comm, current->pid, sig);
     266                 :            : }
     267                 :            : 
     268                 :            : /**
     269                 :            :  * task_set_jobctl_pending - set jobctl pending bits
     270                 :            :  * @task: target task
     271                 :            :  * @mask: pending bits to set
     272                 :            :  *
     273                 :            :  * Clear @mask from @task->jobctl.  @mask must be subset of
     274                 :            :  * %JOBCTL_PENDING_MASK | %JOBCTL_STOP_CONSUME | %JOBCTL_STOP_SIGMASK |
     275                 :            :  * %JOBCTL_TRAPPING.  If stop signo is being set, the existing signo is
     276                 :            :  * cleared.  If @task is already being killed or exiting, this function
     277                 :            :  * becomes noop.
     278                 :            :  *
     279                 :            :  * CONTEXT:
     280                 :            :  * Must be called with @task->sighand->siglock held.
     281                 :            :  *
     282                 :            :  * RETURNS:
     283                 :            :  * %true if @mask is set, %false if made noop because @task was dying.
     284                 :            :  */
     285                 :          0 : bool task_set_jobctl_pending(struct task_struct *task, unsigned long mask)
     286                 :            : {
     287         [ #  # ]:          0 :         BUG_ON(mask & ~(JOBCTL_PENDING_MASK | JOBCTL_STOP_CONSUME |
     288                 :            :                         JOBCTL_STOP_SIGMASK | JOBCTL_TRAPPING));
     289         [ #  # ]:          0 :         BUG_ON((mask & JOBCTL_TRAPPING) && !(mask & JOBCTL_PENDING_MASK));
     290                 :            : 
     291   [ #  #  #  # ]:          0 :         if (unlikely(fatal_signal_pending(task) || (task->flags & PF_EXITING)))
     292                 :            :                 return false;
     293                 :            : 
     294         [ #  # ]:          0 :         if (mask & JOBCTL_STOP_SIGMASK)
     295                 :          0 :                 task->jobctl &= ~JOBCTL_STOP_SIGMASK;
     296                 :            : 
     297                 :          0 :         task->jobctl |= mask;
     298                 :          0 :         return true;
     299                 :            : }
     300                 :            : 
     301                 :            : /**
     302                 :            :  * task_clear_jobctl_trapping - clear jobctl trapping bit
     303                 :            :  * @task: target task
     304                 :            :  *
     305                 :            :  * If JOBCTL_TRAPPING is set, a ptracer is waiting for us to enter TRACED.
     306                 :            :  * Clear it and wake up the ptracer.  Note that we don't need any further
     307                 :            :  * locking.  @task->siglock guarantees that @task->parent points to the
     308                 :            :  * ptracer.
     309                 :            :  *
     310                 :            :  * CONTEXT:
     311                 :            :  * Must be called with @task->sighand->siglock held.
     312                 :            :  */
     313                 :          0 : void task_clear_jobctl_trapping(struct task_struct *task)
     314                 :            : {
     315         [ #  # ]:          0 :         if (unlikely(task->jobctl & JOBCTL_TRAPPING)) {
     316                 :          0 :                 task->jobctl &= ~JOBCTL_TRAPPING;
     317                 :          0 :                 smp_mb();       /* advised by wake_up_bit() */
     318                 :          0 :                 wake_up_bit(&task->jobctl, JOBCTL_TRAPPING_BIT);
     319                 :            :         }
     320                 :          0 : }
     321                 :            : 
     322                 :            : /**
     323                 :            :  * task_clear_jobctl_pending - clear jobctl pending bits
     324                 :            :  * @task: target task
     325                 :            :  * @mask: pending bits to clear
     326                 :            :  *
     327                 :            :  * Clear @mask from @task->jobctl.  @mask must be subset of
     328                 :            :  * %JOBCTL_PENDING_MASK.  If %JOBCTL_STOP_PENDING is being cleared, other
     329                 :            :  * STOP bits are cleared together.
     330                 :            :  *
     331                 :            :  * If clearing of @mask leaves no stop or trap pending, this function calls
     332                 :            :  * task_clear_jobctl_trapping().
     333                 :            :  *
     334                 :            :  * CONTEXT:
     335                 :            :  * Must be called with @task->sighand->siglock held.
     336                 :            :  */
     337                 :          0 : void task_clear_jobctl_pending(struct task_struct *task, unsigned long mask)
     338                 :            : {
     339         [ #  # ]:          0 :         BUG_ON(mask & ~JOBCTL_PENDING_MASK);
     340                 :            : 
     341         [ #  # ]:          0 :         if (mask & JOBCTL_STOP_PENDING)
     342                 :          0 :                 mask |= JOBCTL_STOP_CONSUME | JOBCTL_STOP_DEQUEUED;
     343                 :            : 
     344                 :          0 :         task->jobctl &= ~mask;
     345                 :            : 
     346         [ #  # ]:          0 :         if (!(task->jobctl & JOBCTL_PENDING_MASK))
     347                 :          0 :                 task_clear_jobctl_trapping(task);
     348                 :          0 : }
     349                 :            : 
     350                 :            : /**
     351                 :            :  * task_participate_group_stop - participate in a group stop
     352                 :            :  * @task: task participating in a group stop
     353                 :            :  *
     354                 :            :  * @task has %JOBCTL_STOP_PENDING set and is participating in a group stop.
     355                 :            :  * Group stop states are cleared and the group stop count is consumed if
     356                 :            :  * %JOBCTL_STOP_CONSUME was set.  If the consumption completes the group
     357                 :            :  * stop, the appropriate `SIGNAL_*` flags are set.
     358                 :            :  *
     359                 :            :  * CONTEXT:
     360                 :            :  * Must be called with @task->sighand->siglock held.
     361                 :            :  *
     362                 :            :  * RETURNS:
     363                 :            :  * %true if group stop completion should be notified to the parent, %false
     364                 :            :  * otherwise.
     365                 :            :  */
     366                 :          0 : static bool task_participate_group_stop(struct task_struct *task)
     367                 :            : {
     368                 :          0 :         struct signal_struct *sig = task->signal;
     369                 :          0 :         bool consume = task->jobctl & JOBCTL_STOP_CONSUME;
     370                 :            : 
     371         [ #  # ]:          0 :         WARN_ON_ONCE(!(task->jobctl & JOBCTL_STOP_PENDING));
     372                 :            : 
     373                 :          0 :         task_clear_jobctl_pending(task, JOBCTL_STOP_PENDING);
     374                 :            : 
     375         [ #  # ]:          0 :         if (!consume)
     376                 :            :                 return false;
     377                 :            : 
     378   [ #  #  #  # ]:          0 :         if (!WARN_ON_ONCE(sig->group_stop_count == 0))
     379                 :          0 :                 sig->group_stop_count--;
     380                 :            : 
     381                 :            :         /*
     382                 :            :          * Tell the caller to notify completion iff we are entering into a
     383                 :            :          * fresh group stop.  Read comment in do_signal_stop() for details.
     384                 :            :          */
     385         [ #  # ]:          0 :         if (!sig->group_stop_count && !(sig->flags & SIGNAL_STOP_STOPPED)) {
     386         [ #  # ]:          0 :                 signal_set_stop_flags(sig, SIGNAL_STOP_STOPPED);
     387                 :          0 :                 return true;
     388                 :            :         }
     389                 :            :         return false;
     390                 :            : }
     391                 :            : 
     392                 :         84 : void task_join_group_stop(struct task_struct *task)
     393                 :            : {
     394                 :            :         /* Have the new thread join an on-going signal group stop */
     395         [ -  + ]:         84 :         unsigned long jobctl = current->jobctl;
     396         [ -  + ]:         84 :         if (jobctl & JOBCTL_STOP_PENDING) {
     397                 :          0 :                 struct signal_struct *sig = current->signal;
     398                 :          0 :                 unsigned long signr = jobctl & JOBCTL_STOP_SIGMASK;
     399                 :          0 :                 unsigned long gstop = JOBCTL_STOP_PENDING | JOBCTL_STOP_CONSUME;
     400         [ #  # ]:          0 :                 if (task_set_jobctl_pending(task, signr | gstop)) {
     401                 :          0 :                         sig->group_stop_count++;
     402                 :            :                 }
     403                 :            :         }
     404                 :         84 : }
     405                 :            : 
     406                 :            : /*
     407                 :            :  * allocate a new signal queue record
     408                 :            :  * - this may be called without locks if and only if t == current, otherwise an
     409                 :            :  *   appropriate lock must be held to stop the target task from exiting
     410                 :            :  */
     411                 :            : static struct sigqueue *
     412                 :       1801 : __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimit)
     413                 :            : {
     414                 :       1801 :         struct sigqueue *q = NULL;
     415                 :       1801 :         struct user_struct *user;
     416                 :       1801 :         int sigpending;
     417                 :            : 
     418                 :            :         /*
     419                 :            :          * Protect access to @t credentials. This can go away when all
     420                 :            :          * callers hold rcu read lock.
     421                 :            :          *
     422                 :            :          * NOTE! A pending signal will hold on to the user refcount,
     423                 :            :          * and we get/put the refcount only when the sigpending count
     424                 :            :          * changes from/to zero.
     425                 :            :          */
     426                 :       1801 :         rcu_read_lock();
     427                 :       1801 :         user = __task_cred(t)->user;
     428                 :       1801 :         sigpending = atomic_inc_return(&user->sigpending);
     429         [ +  + ]:       1801 :         if (sigpending == 1)
     430                 :       1701 :                 get_uid(user);
     431                 :       1801 :         rcu_read_unlock();
     432                 :            : 
     433   [ -  +  -  - ]:       1801 :         if (override_rlimit || likely(sigpending <= task_rlimit(t, RLIMIT_SIGPENDING))) {
     434                 :       1801 :                 q = kmem_cache_alloc(sigqueue_cachep, flags);
     435                 :            :         } else {
     436                 :          0 :                 print_dropped_signal(sig);
     437                 :            :         }
     438                 :            : 
     439         [ -  + ]:       1801 :         if (unlikely(q == NULL)) {
     440         [ #  # ]:          0 :                 if (atomic_dec_and_test(&user->sigpending))
     441                 :          0 :                         free_uid(user);
     442                 :            :         } else {
     443                 :       1801 :                 INIT_LIST_HEAD(&q->list);
     444                 :       1801 :                 q->flags = 0;
     445                 :       1801 :                 q->user = user;
     446                 :            :         }
     447                 :            : 
     448                 :       1801 :         return q;
     449                 :            : }
     450                 :            : 
     451                 :       1801 : static void __sigqueue_free(struct sigqueue *q)
     452                 :            : {
     453         [ +  - ]:       1801 :         if (q->flags & SIGQUEUE_PREALLOC)
     454                 :            :                 return;
     455         [ +  + ]:       1801 :         if (atomic_dec_and_test(&q->user->sigpending))
     456                 :       1701 :                 free_uid(q->user);
     457                 :       1801 :         kmem_cache_free(sigqueue_cachep, q);
     458                 :            : }
     459                 :            : 
     460                 :      19110 : void flush_sigqueue(struct sigpending *queue)
     461                 :            : {
     462                 :      19110 :         struct sigqueue *q;
     463                 :            : 
     464                 :      19110 :         sigemptyset(&queue->signal);
     465         [ +  + ]:      19152 :         while (!list_empty(&queue->list)) {
     466                 :         42 :                 q = list_entry(queue->list.next, struct sigqueue , list);
     467                 :         42 :                 list_del_init(&q->list);
     468                 :         42 :                 __sigqueue_free(q);
     469                 :            :         }
     470                 :      19110 : }
     471                 :            : 
     472                 :            : /*
     473                 :            :  * Flush all pending signals for this kthread.
     474                 :            :  */
     475                 :         21 : void flush_signals(struct task_struct *t)
     476                 :            : {
     477                 :         21 :         unsigned long flags;
     478                 :            : 
     479                 :         21 :         spin_lock_irqsave(&t->sighand->siglock, flags);
     480                 :         21 :         clear_tsk_thread_flag(t, TIF_SIGPENDING);
     481                 :         21 :         flush_sigqueue(&t->pending);
     482                 :         21 :         flush_sigqueue(&t->signal->shared_pending);
     483                 :         21 :         spin_unlock_irqrestore(&t->sighand->siglock, flags);
     484                 :         21 : }
     485                 :            : EXPORT_SYMBOL(flush_signals);
     486                 :            : 
     487                 :            : #ifdef CONFIG_POSIX_TIMERS
     488                 :      17346 : static void __flush_itimer_signals(struct sigpending *pending)
     489                 :            : {
     490                 :      17346 :         sigset_t signal, retain;
     491                 :      17346 :         struct sigqueue *q, *n;
     492                 :            : 
     493                 :      17346 :         signal = pending->signal;
     494                 :      17346 :         sigemptyset(&retain);
     495                 :            : 
     496         [ -  + ]:      17346 :         list_for_each_entry_safe(q, n, &pending->list, list) {
     497                 :          0 :                 int sig = q->info.si_signo;
     498                 :            : 
     499         [ #  # ]:          0 :                 if (likely(q->info.si_code != SI_TIMER)) {
     500                 :          0 :                         sigaddset(&retain, sig);
     501                 :            :                 } else {
     502                 :          0 :                         sigdelset(&signal, sig);
     503                 :          0 :                         list_del_init(&q->list);
     504                 :          0 :                         __sigqueue_free(q);
     505                 :            :                 }
     506                 :            :         }
     507                 :            : 
     508                 :      17346 :         sigorsets(&pending->signal, &signal, &retain);
     509                 :      17346 : }
     510                 :            : 
     511                 :       8673 : void flush_itimer_signals(void)
     512                 :            : {
     513                 :       8673 :         struct task_struct *tsk = current;
     514                 :       8673 :         unsigned long flags;
     515                 :            : 
     516                 :       8673 :         spin_lock_irqsave(&tsk->sighand->siglock, flags);
     517                 :       8673 :         __flush_itimer_signals(&tsk->pending);
     518                 :       8673 :         __flush_itimer_signals(&tsk->signal->shared_pending);
     519                 :       8673 :         spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
     520                 :       8673 : }
     521                 :            : #endif
     522                 :            : 
     523                 :         21 : void ignore_signals(struct task_struct *t)
     524                 :            : {
     525                 :         21 :         int i;
     526                 :            : 
     527         [ +  + ]:       1365 :         for (i = 0; i < _NSIG; ++i)
     528                 :       1344 :                 t->sighand->action[i].sa.sa_handler = SIG_IGN;
     529                 :            : 
     530                 :         21 :         flush_signals(t);
     531                 :         21 : }
     532                 :            : 
     533                 :            : /*
     534                 :            :  * Flush all handlers for a task.
     535                 :            :  */
     536                 :            : 
     537                 :            : void
     538                 :       9975 : flush_signal_handlers(struct task_struct *t, int force_default)
     539                 :            : {
     540                 :       9975 :         int i;
     541                 :       9975 :         struct k_sigaction *ka = &t->sighand->action[0];
     542         [ +  + ]:     648375 :         for (i = _NSIG ; i != 0 ; i--) {
     543   [ +  +  +  + ]:     638400 :                 if (force_default || ka->sa.sa_handler != SIG_IGN)
     544                 :     631134 :                         ka->sa.sa_handler = SIG_DFL;
     545                 :     638400 :                 ka->sa.sa_flags = 0;
     546                 :            : #ifdef __ARCH_HAS_SA_RESTORER
     547                 :     638400 :                 ka->sa.sa_restorer = NULL;
     548                 :            : #endif
     549                 :     638400 :                 sigemptyset(&ka->sa.sa_mask);
     550                 :     638400 :                 ka++;
     551                 :            :         }
     552                 :       9975 : }
     553                 :            : 
     554                 :          0 : bool unhandled_signal(struct task_struct *tsk, int sig)
     555                 :            : {
     556                 :          0 :         void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler;
     557         [ #  # ]:          0 :         if (is_global_init(tsk))
     558                 :            :                 return true;
     559                 :            : 
     560         [ #  # ]:          0 :         if (handler != SIG_IGN && handler != SIG_DFL)
     561                 :            :                 return false;
     562                 :            : 
     563                 :            :         /* if ptraced, let the tracer determine */
     564                 :          0 :         return !tsk->ptrace;
     565                 :            : }
     566                 :            : 
     567                 :       1759 : static void collect_signal(int sig, struct sigpending *list, kernel_siginfo_t *info,
     568                 :            :                            bool *resched_timer)
     569                 :            : {
     570                 :       1759 :         struct sigqueue *q, *first = NULL;
     571                 :            : 
     572                 :            :         /*
     573                 :            :          * Collect the siginfo appropriate to this signal.  Check if
     574                 :            :          * there is another siginfo for the same signal.
     575                 :            :         */
     576         [ +  + ]:       3518 :         list_for_each_entry(q, &list->list, list) {
     577         [ +  - ]:       1759 :                 if (q->info.si_signo == sig) {
     578         [ -  + ]:       1759 :                         if (first)
     579                 :          0 :                                 goto still_pending;
     580                 :            :                         first = q;
     581                 :            :                 }
     582                 :            :         }
     583                 :            : 
     584         [ +  - ]:       1759 :         sigdelset(&list->signal, sig);
     585                 :            : 
     586         [ +  - ]:       1759 :         if (first) {
     587                 :       1759 : still_pending:
     588         [ -  + ]:       1759 :                 list_del_init(&first->list);
     589         [ -  + ]:       1759 :                 copy_siginfo(info, &first->info);
     590                 :            : 
     591                 :       3518 :                 *resched_timer =
     592                 :       1759 :                         (first->flags & SIGQUEUE_PREALLOC) &&
     593   [ -  +  -  - ]:       1759 :                         (info->si_code == SI_TIMER) &&
     594         [ #  # ]:          0 :                         (info->si_sys_private);
     595                 :            : 
     596                 :       1759 :                 __sigqueue_free(first);
     597                 :            :         } else {
     598                 :            :                 /*
     599                 :            :                  * Ok, it wasn't in the queue.  This must be
     600                 :            :                  * a fast-pathed signal or we must have been
     601                 :            :                  * out of queue space.  So zero out the info.
     602                 :            :                  */
     603                 :          0 :                 clear_siginfo(info);
     604                 :          0 :                 info->si_signo = sig;
     605                 :          0 :                 info->si_errno = 0;
     606                 :          0 :                 info->si_code = SI_USER;
     607                 :          0 :                 info->si_pid = 0;
     608                 :          0 :                 info->si_uid = 0;
     609                 :            :         }
     610                 :       1759 : }
     611                 :            : 
     612                 :      73098 : static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
     613                 :            :                         kernel_siginfo_t *info, bool *resched_timer)
     614                 :            : {
     615         [ +  + ]:      73098 :         int sig = next_signal(pending, mask);
     616                 :            : 
     617         [ +  - ]:       1759 :         if (sig)
     618                 :       1759 :                 collect_signal(sig, pending, info, resched_timer);
     619                 :      73098 :         return sig;
     620                 :            : }
     621                 :            : 
     622                 :            : /*
     623                 :            :  * Dequeue a signal and return the element to the caller, which is
     624                 :            :  * expected to free it.
     625                 :            :  *
     626                 :            :  * All callers have to hold the siglock.
     627                 :            :  */
     628                 :      36549 : int dequeue_signal(struct task_struct *tsk, sigset_t *mask, kernel_siginfo_t *info)
     629                 :            : {
     630                 :      36549 :         bool resched_timer = false;
     631                 :      36549 :         int signr;
     632                 :            : 
     633                 :            :         /* We only dequeue private signals from ourselves, we don't let
     634                 :            :          * signalfd steal them
     635                 :            :          */
     636                 :      36549 :         signr = __dequeue_signal(&tsk->pending, mask, info, &resched_timer);
     637         [ +  - ]:      36549 :         if (!signr) {
     638                 :      36549 :                 signr = __dequeue_signal(&tsk->signal->shared_pending,
     639                 :            :                                          mask, info, &resched_timer);
     640                 :            : #ifdef CONFIG_POSIX_TIMERS
     641                 :            :                 /*
     642                 :            :                  * itimer signal ?
     643                 :            :                  *
     644                 :            :                  * itimers are process shared and we restart periodic
     645                 :            :                  * itimers in the signal delivery path to prevent DoS
     646                 :            :                  * attacks in the high resolution timer case. This is
     647                 :            :                  * compliant with the old way of self-restarting
     648                 :            :                  * itimers, as the SIGALRM is a legacy signal and only
     649                 :            :                  * queued once. Changing the restart behaviour to
     650                 :            :                  * restart the timer in the signal dequeue path is
     651                 :            :                  * reducing the timer noise on heavy loaded !highres
     652                 :            :                  * systems too.
     653                 :            :                  */
     654         [ -  + ]:      36549 :                 if (unlikely(signr == SIGALRM)) {
     655                 :          0 :                         struct hrtimer *tmr = &tsk->signal->real_timer;
     656                 :            : 
     657         [ #  # ]:          0 :                         if (!hrtimer_is_queued(tmr) &&
     658         [ #  # ]:          0 :                             tsk->signal->it_real_incr != 0) {
     659                 :          0 :                                 hrtimer_forward(tmr, tmr->base->get_time(),
     660                 :            :                                                 tsk->signal->it_real_incr);
     661                 :          0 :                                 hrtimer_restart(tmr);
     662                 :            :                         }
     663                 :            :                 }
     664                 :            : #endif
     665                 :            :         }
     666                 :            : 
     667                 :      36549 :         recalc_sigpending();
     668         [ +  + ]:      36549 :         if (!signr)
     669                 :            :                 return 0;
     670                 :            : 
     671   [ +  -  +  + ]:       1759 :         if (unlikely(sig_kernel_stop(signr))) {
     672                 :            :                 /*
     673                 :            :                  * Set a marker that we have dequeued a stop signal.  Our
     674                 :            :                  * caller might release the siglock and then the pending
     675                 :            :                  * stop signal it is about to process is no longer in the
     676                 :            :                  * pending bitmasks, but must still be cleared by a SIGCONT
     677                 :            :                  * (and overruled by a SIGKILL).  So those cases clear this
     678                 :            :                  * shared flag after we've set it.  Note that this flag may
     679                 :            :                  * remain set after the signal we return is ignored or
     680                 :            :                  * handled.  That doesn't matter because its only purpose
     681                 :            :                  * is to alert stop-signal processing code when another
     682                 :            :                  * processor has come along and cleared the flag.
     683                 :            :                  */
     684                 :         21 :                 current->jobctl |= JOBCTL_STOP_DEQUEUED;
     685                 :            :         }
     686                 :            : #ifdef CONFIG_POSIX_TIMERS
     687         [ -  + ]:       1759 :         if (resched_timer) {
     688                 :            :                 /*
     689                 :            :                  * Release the siglock to ensure proper locking order
     690                 :            :                  * of timer locks outside of siglocks.  Note, we leave
     691                 :            :                  * irqs disabled here, since the posix-timers code is
     692                 :            :                  * about to disable them again anyway.
     693                 :            :                  */
     694                 :          0 :                 spin_unlock(&tsk->sighand->siglock);
     695                 :          0 :                 posixtimer_rearm(info);
     696                 :          0 :                 spin_lock(&tsk->sighand->siglock);
     697                 :            : 
     698                 :            :                 /* Don't expose the si_sys_private value to userspace */
     699                 :          0 :                 info->si_sys_private = 0;
     700                 :            :         }
     701                 :            : #endif
     702                 :            :         return signr;
     703                 :            : }
     704                 :            : EXPORT_SYMBOL_GPL(dequeue_signal);
     705                 :            : 
     706                 :      35714 : static int dequeue_synchronous_signal(kernel_siginfo_t *info)
     707                 :            : {
     708         [ -  + ]:      35714 :         struct task_struct *tsk = current;
     709                 :      35714 :         struct sigpending *pending = &tsk->pending;
     710                 :      35714 :         struct sigqueue *q, *sync = NULL;
     711                 :            : 
     712                 :            :         /*
     713                 :            :          * Might a synchronous signal be in the queue?
     714                 :            :          */
     715         [ -  + ]:      35714 :         if (!((pending->signal.sig[0] & ~tsk->blocked.sig[0]) & SYNCHRONOUS_MASK))
     716                 :            :                 return 0;
     717                 :            : 
     718                 :            :         /*
     719                 :            :          * Return the first synchronous signal in the queue.
     720                 :            :          */
     721         [ #  # ]:          0 :         list_for_each_entry(q, &pending->list, list) {
     722                 :            :                 /* Synchronous signals have a postive si_code */
     723         [ #  # ]:          0 :                 if ((q->info.si_code > SI_USER) &&
     724         [ #  # ]:          0 :                     (sigmask(q->info.si_signo) & SYNCHRONOUS_MASK)) {
     725                 :          0 :                         sync = q;
     726                 :          0 :                         goto next;
     727                 :            :                 }
     728                 :            :         }
     729                 :            :         return 0;
     730                 :            : next:
     731                 :            :         /*
     732                 :            :          * Check if there is another siginfo for the same signal.
     733                 :            :          */
     734         [ #  # ]:          0 :         list_for_each_entry_continue(q, &pending->list, list) {
     735         [ #  # ]:          0 :                 if (q->info.si_signo == sync->info.si_signo)
     736                 :          0 :                         goto still_pending;
     737                 :            :         }
     738                 :            : 
     739                 :          0 :         sigdelset(&pending->signal, sync->info.si_signo);
     740                 :          0 :         recalc_sigpending();
     741                 :          0 : still_pending:
     742                 :          0 :         list_del_init(&sync->list);
     743                 :          0 :         copy_siginfo(info, &sync->info);
     744                 :          0 :         __sigqueue_free(sync);
     745                 :          0 :         return info->si_signo;
     746                 :            : }
     747                 :            : 
     748                 :            : /*
     749                 :            :  * Tell a process that it has a new active signal..
     750                 :            :  *
     751                 :            :  * NOTE! we rely on the previous spin_lock to
     752                 :            :  * lock interrupts for us! We can only be called with
     753                 :            :  * "siglock" held, and the local interrupt must
     754                 :            :  * have been disabled when that got acquired!
     755                 :            :  *
     756                 :            :  * No need to set need_resched since signal event passing
     757                 :            :  * goes through ->blocked
     758                 :            :  */
     759                 :        777 : void signal_wake_up_state(struct task_struct *t, unsigned int state)
     760                 :            : {
     761                 :        777 :         set_tsk_thread_flag(t, TIF_SIGPENDING);
     762                 :            :         /*
     763                 :            :          * TASK_WAKEKILL also means wake it up in the stopped/traced/killable
     764                 :            :          * case. We don't check t->state here because there is a race with it
     765                 :            :          * executing another processor and just now entering stopped state.
     766                 :            :          * By using wake_up_state, we ensure the process will wake up and
     767                 :            :          * handle its death signal.
     768                 :            :          */
     769         [ +  + ]:        777 :         if (!wake_up_state(t, state | TASK_INTERRUPTIBLE))
     770                 :         63 :                 kick_process(t);
     771                 :        777 : }
     772                 :            : 
     773                 :            : /*
     774                 :            :  * Remove signals in mask from the pending set and queue.
     775                 :            :  * Returns 1 if any signals were found.
     776                 :            :  *
     777                 :            :  * All callers must be holding the siglock.
     778                 :            :  */
     779                 :       8610 : static void flush_sigqueue_mask(sigset_t *mask, struct sigpending *s)
     780                 :            : {
     781                 :       8610 :         struct sigqueue *q, *n;
     782                 :       8610 :         sigset_t m;
     783                 :            : 
     784         [ -  + ]:       8610 :         sigandsets(&m, mask, &s->signal);
     785         [ -  + ]:       8610 :         if (sigisemptyset(&m))
     786                 :            :                 return;
     787                 :            : 
     788                 :          0 :         sigandnsets(&s->signal, &s->signal, mask);
     789         [ #  # ]:          0 :         list_for_each_entry_safe(q, n, &s->list, list) {
     790         [ #  # ]:          0 :                 if (sigismember(mask, q->info.si_signo)) {
     791                 :          0 :                         list_del_init(&q->list);
     792                 :          0 :                         __sigqueue_free(q);
     793                 :            :                 }
     794                 :            :         }
     795                 :            : }
     796                 :            : 
     797                 :       1843 : static inline int is_si_special(const struct kernel_siginfo *info)
     798                 :            : {
     799                 :       1843 :         return info <= SEND_SIG_PRIV;
     800                 :            : }
     801                 :            : 
     802                 :         42 : static inline bool si_fromuser(const struct kernel_siginfo *info)
     803                 :            : {
     804         [ +  - ]:         42 :         return info == SEND_SIG_NOINFO ||
     805         [ +  - ]:         42 :                 (!is_si_special(info) && SI_FROMUSER(info));
     806                 :            : }
     807                 :            : 
     808                 :            : /*
     809                 :            :  * called with RCU read lock from check_kill_permission()
     810                 :            :  */
     811                 :         21 : static bool kill_ok_by_cred(struct task_struct *t)
     812                 :            : {
     813         [ -  + ]:         21 :         const struct cred *cred = current_cred();
     814         [ -  + ]:         21 :         const struct cred *tcred = __task_cred(t);
     815                 :            : 
     816   [ -  +  -  - ]:         21 :         return uid_eq(cred->euid, tcred->suid) ||
     817         [ #  # ]:          0 :                uid_eq(cred->euid, tcred->uid) ||
     818         [ #  # ]:          0 :                uid_eq(cred->uid, tcred->suid) ||
     819   [ -  +  -  - ]:         21 :                uid_eq(cred->uid, tcred->uid) ||
     820                 :          0 :                ns_capable(tcred->user_ns, CAP_KILL);
     821                 :            : }
     822                 :            : 
     823                 :            : /*
     824                 :            :  * Bad permissions for sending the signal
     825                 :            :  * - the caller must hold the RCU read lock
     826                 :            :  */
     827                 :         42 : static int check_kill_permission(int sig, struct kernel_siginfo *info,
     828                 :            :                                  struct task_struct *t)
     829                 :            : {
     830                 :         42 :         struct pid *sid;
     831                 :         42 :         int error;
     832                 :            : 
     833         [ +  - ]:         42 :         if (!valid_signal(sig))
     834                 :            :                 return -EINVAL;
     835                 :            : 
     836   [ +  -  +  - ]:         84 :         if (!si_fromuser(info))
     837                 :            :                 return 0;
     838                 :            : 
     839                 :         42 :         error = audit_signal_info(sig, t); /* Let audit system see the signal */
     840         [ +  - ]:         42 :         if (error)
     841                 :            :                 return error;
     842                 :            : 
     843   [ +  +  +  - ]:         63 :         if (!same_thread_group(current, t) &&
     844                 :         21 :             !kill_ok_by_cred(t)) {
     845         [ #  # ]:          0 :                 switch (sig) {
     846                 :            :                 case SIGCONT:
     847         [ #  # ]:          0 :                         sid = task_session(t);
     848                 :            :                         /*
     849                 :            :                          * We don't return the error if sid == NULL. The
     850                 :            :                          * task was unhashed, the caller must notice this.
     851                 :            :                          */
     852   [ #  #  #  # ]:          0 :                         if (!sid || sid == task_session(current))
     853                 :            :                                 break;
     854                 :            :                         /* fall through */
     855                 :            :                 default:
     856                 :            :                         return -EPERM;
     857                 :            :                 }
     858                 :         42 :         }
     859                 :            : 
     860                 :         42 :         return security_task_kill(t, info, sig, NULL);
     861                 :            : }
     862                 :            : 
     863                 :            : /**
     864                 :            :  * ptrace_trap_notify - schedule trap to notify ptracer
     865                 :            :  * @t: tracee wanting to notify tracer
     866                 :            :  *
     867                 :            :  * This function schedules sticky ptrace trap which is cleared on the next
     868                 :            :  * TRAP_STOP to notify ptracer of an event.  @t must have been seized by
     869                 :            :  * ptracer.
     870                 :            :  *
     871                 :            :  * If @t is running, STOP trap will be taken.  If trapped for STOP and
     872                 :            :  * ptracer is listening for events, tracee is woken up so that it can
     873                 :            :  * re-trap for the new event.  If trapped otherwise, STOP trap will be
     874                 :            :  * eventually taken without returning to userland after the existing traps
     875                 :            :  * are finished by PTRACE_CONT.
     876                 :            :  *
     877                 :            :  * CONTEXT:
     878                 :            :  * Must be called with @task->sighand->siglock held.
     879                 :            :  */
     880                 :          0 : static void ptrace_trap_notify(struct task_struct *t)
     881                 :            : {
     882         [ #  # ]:          0 :         WARN_ON_ONCE(!(t->ptrace & PT_SEIZED));
     883         [ #  # ]:          0 :         assert_spin_locked(&t->sighand->siglock);
     884                 :            : 
     885                 :          0 :         task_set_jobctl_pending(t, JOBCTL_TRAP_NOTIFY);
     886         [ #  # ]:          0 :         ptrace_signal_wake_up(t, t->jobctl & JOBCTL_LISTENING);
     887                 :          0 : }
     888                 :            : 
     889                 :            : /*
     890                 :            :  * Handle magic process-wide effects of stop/continue signals. Unlike
     891                 :            :  * the signal actions, these happen immediately at signal-generation
     892                 :            :  * time regardless of blocking, ignoring, or handling.  This does the
     893                 :            :  * actual continuing for SIGCONT, but not the actual stopping for stop
     894                 :            :  * signals. The process stop is done as a signal action for SIG_DFL.
     895                 :            :  *
     896                 :            :  * Returns true if the signal should be actually delivered, otherwise
     897                 :            :  * it should be dropped.
     898                 :            :  */
     899                 :       9051 : static bool prepare_signal(int sig, struct task_struct *p, bool force)
     900                 :            : {
     901                 :       9051 :         struct signal_struct *signal = p->signal;
     902                 :       9051 :         struct task_struct *t;
     903                 :       9051 :         sigset_t flush;
     904                 :            : 
     905         [ -  + ]:       9051 :         if (signal->flags & (SIGNAL_GROUP_EXIT | SIGNAL_GROUP_COREDUMP)) {
     906         [ #  # ]:          0 :                 if (!(signal->flags & SIGNAL_GROUP_EXIT))
     907                 :          0 :                         return sig == SIGKILL;
     908                 :            :                 /*
     909                 :            :                  * The process is in the middle of dying, nothing to do.
     910                 :            :                  */
     911   [ +  -  +  + ]:       9051 :         } else if (sig_kernel_stop(sig)) {
     912                 :            :                 /*
     913                 :            :                  * This is a stop signal.  Remove SIGCONT from all queues.
     914                 :            :                  */
     915                 :         21 :                 siginitset(&flush, sigmask(SIGCONT));
     916                 :         21 :                 flush_sigqueue_mask(&flush, &signal->shared_pending);
     917         [ +  + ]:         84 :                 for_each_thread(p, t)
     918                 :         63 :                         flush_sigqueue_mask(&flush, &t->pending);
     919         [ -  + ]:       9030 :         } else if (sig == SIGCONT) {
     920                 :          0 :                 unsigned int why;
     921                 :            :                 /*
     922                 :            :                  * Remove all stop signals from all queues, wake all threads.
     923                 :            :                  */
     924                 :          0 :                 siginitset(&flush, SIG_KERNEL_STOP_MASK);
     925                 :          0 :                 flush_sigqueue_mask(&flush, &signal->shared_pending);
     926         [ #  # ]:          0 :                 for_each_thread(p, t) {
     927                 :          0 :                         flush_sigqueue_mask(&flush, &t->pending);
     928                 :          0 :                         task_clear_jobctl_pending(t, JOBCTL_STOP_PENDING);
     929         [ #  # ]:          0 :                         if (likely(!(t->ptrace & PT_SEIZED)))
     930                 :          0 :                                 wake_up_state(t, __TASK_STOPPED);
     931                 :            :                         else
     932                 :          0 :                                 ptrace_trap_notify(t);
     933                 :            :                 }
     934                 :            : 
     935                 :            :                 /*
     936                 :            :                  * Notify the parent with CLD_CONTINUED if we were stopped.
     937                 :            :                  *
     938                 :            :                  * If we were in the middle of a group stop, we pretend it
     939                 :            :                  * was already finished, and then continued. Since SIGCHLD
     940                 :            :                  * doesn't queue we report only CLD_STOPPED, as if the next
     941                 :            :                  * CLD_CONTINUED was dropped.
     942                 :            :                  */
     943                 :          0 :                 why = 0;
     944         [ #  # ]:          0 :                 if (signal->flags & SIGNAL_STOP_STOPPED)
     945                 :            :                         why |= SIGNAL_CLD_CONTINUED;
     946         [ #  # ]:          0 :                 else if (signal->group_stop_count)
     947                 :            :                         why |= SIGNAL_CLD_STOPPED;
     948                 :            : 
     949                 :            :                 if (why) {
     950                 :            :                         /*
     951                 :            :                          * The first thread which returns from do_signal_stop()
     952                 :            :                          * will take ->siglock, notice SIGNAL_CLD_MASK, and
     953                 :            :                          * notify its parent. See get_signal().
     954                 :            :                          */
     955         [ #  # ]:          0 :                         signal_set_stop_flags(signal, why | SIGNAL_STOP_CONTINUED);
     956                 :          0 :                         signal->group_stop_count = 0;
     957                 :          0 :                         signal->group_exit_code = 0;
     958                 :            :                 }
     959                 :            :         }
     960                 :            : 
     961                 :       9051 :         return !sig_ignored(p, sig, force);
     962                 :            : }
     963                 :            : 
     964                 :            : /*
     965                 :            :  * Test if P wants to take SIG.  After we've checked all threads with this,
     966                 :            :  * it's equivalent to finding no threads not blocking SIG.  Any threads not
     967                 :            :  * blocking SIG were ruled out because they are not running and already
     968                 :            :  * have pending signals.  Such threads will dequeue from the shared queue
     969                 :            :  * as soon as they're available, so putting the signal on the shared queue
     970                 :            :  * will be equivalent to sending it to one such thread.
     971                 :            :  */
     972                 :       1801 : static inline bool wants_signal(int sig, struct task_struct *p)
     973                 :            : {
     974         [ +  + ]:       1801 :         if (sigismember(&p->blocked, sig))
     975                 :            :                 return false;
     976                 :            : 
     977         [ +  - ]:        777 :         if (p->flags & PF_EXITING)
     978                 :            :                 return false;
     979                 :            : 
     980         [ +  - ]:        777 :         if (sig == SIGKILL)
     981                 :            :                 return true;
     982                 :            : 
     983         [ +  - ]:        777 :         if (task_is_stopped_or_traced(p))
     984                 :            :                 return false;
     985                 :            : 
     986   [ +  +  +  - ]:       2289 :         return task_curr(p) || !signal_pending(p);
     987                 :            : }
     988                 :            : 
     989                 :       1801 : static void complete_signal(int sig, struct task_struct *p, enum pid_type type)
     990                 :            : {
     991                 :       1801 :         struct signal_struct *signal = p->signal;
     992                 :       1801 :         struct task_struct *t;
     993                 :            : 
     994                 :            :         /*
     995                 :            :          * Now find a thread we can wake up to take the signal off the queue.
     996                 :            :          *
     997                 :            :          * If the main thread wants the signal, it gets first crack.
     998                 :            :          * Probably the least surprising to the average bear.
     999                 :            :          */
    1000         [ +  + ]:       1801 :         if (wants_signal(sig, p))
    1001                 :            :                 t = p;
    1002   [ +  -  -  + ]:       1024 :         else if ((type == PIDTYPE_PID) || thread_group_empty(p))
    1003                 :            :                 /*
    1004                 :            :                  * There is just one thread and it does not need to be woken.
    1005                 :            :                  * It will dequeue unblocked signals before it runs again.
    1006                 :            :                  */
    1007                 :            :                 return;
    1008                 :            :         else {
    1009                 :            :                 /*
    1010                 :            :                  * Otherwise try to find a suitable thread.
    1011                 :            :                  */
    1012                 :          0 :                 t = signal->curr_target;
    1013         [ #  # ]:          0 :                 while (!wants_signal(sig, t)) {
    1014         [ #  # ]:          0 :                         t = next_thread(t);
    1015         [ #  # ]:          0 :                         if (t == signal->curr_target)
    1016                 :            :                                 /*
    1017                 :            :                                  * No thread needs to be woken.
    1018                 :            :                                  * Any eligible threads will see
    1019                 :            :                                  * the signal in the queue soon.
    1020                 :            :                                  */
    1021                 :            :                                 return;
    1022                 :            :                 }
    1023                 :          0 :                 signal->curr_target = t;
    1024                 :            :         }
    1025                 :            : 
    1026                 :            :         /*
    1027                 :            :          * Found a killable thread.  If the signal will be fatal,
    1028                 :            :          * then start taking the whole group down immediately.
    1029                 :            :          */
    1030   [ +  -  -  +  :        777 :         if (sig_fatal(p, sig) &&
                   -  - ]
    1031   [ #  #  #  # ]:          0 :             !(signal->flags & SIGNAL_GROUP_EXIT) &&
    1032   [ #  #  #  # ]:          0 :             !sigismember(&t->real_blocked, sig) &&
    1033         [ #  # ]:          0 :             (sig == SIGKILL || !p->ptrace)) {
    1034                 :            :                 /*
    1035                 :            :                  * This signal will be fatal to the whole group.
    1036                 :            :                  */
    1037   [ #  #  #  # ]:          0 :                 if (!sig_kernel_coredump(sig)) {
    1038                 :            :                         /*
    1039                 :            :                          * Start a group exit and wake everybody up.
    1040                 :            :                          * This way we don't have other threads
    1041                 :            :                          * running and doing things after a slower
    1042                 :            :                          * thread has the fatal signal pending.
    1043                 :            :                          */
    1044                 :          0 :                         signal->flags = SIGNAL_GROUP_EXIT;
    1045                 :          0 :                         signal->group_exit_code = sig;
    1046                 :          0 :                         signal->group_stop_count = 0;
    1047                 :          0 :                         t = p;
    1048                 :          0 :                         do {
    1049                 :          0 :                                 task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK);
    1050                 :          0 :                                 sigaddset(&t->pending.signal, SIGKILL);
    1051                 :          0 :                                 signal_wake_up(t, 1);
    1052         [ #  # ]:          0 :                         } while_each_thread(p, t);
    1053                 :            :                         return;
    1054                 :            :                 }
    1055                 :            :         }
    1056                 :            : 
    1057                 :            :         /*
    1058                 :            :          * The signal is already in the shared-pending queue.
    1059                 :            :          * Tell the chosen thread to wake up and dequeue it.
    1060                 :            :          */
    1061         [ +  - ]:        777 :         signal_wake_up(t, sig == SIGKILL);
    1062                 :            :         return;
    1063                 :            : }
    1064                 :            : 
    1065                 :       1953 : static inline bool legacy_queue(struct sigpending *signals, int sig)
    1066                 :            : {
    1067                 :       1953 :         return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
    1068                 :            : }
    1069                 :            : 
    1070                 :       9051 : static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
    1071                 :            :                         enum pid_type type, bool force)
    1072                 :            : {
    1073                 :       9051 :         struct sigpending *pending;
    1074                 :       9051 :         struct sigqueue *q;
    1075                 :       9051 :         int override_rlimit;
    1076                 :       9051 :         int ret = 0, result;
    1077                 :            : 
    1078         [ -  + ]:       9051 :         assert_spin_locked(&t->sighand->siglock);
    1079                 :            : 
    1080                 :       9051 :         result = TRACE_SIGNAL_IGNORED;
    1081         [ +  + ]:       9051 :         if (!prepare_signal(sig, t, force))
    1082                 :       7098 :                 goto ret;
    1083                 :            : 
    1084         [ +  - ]:       1953 :         pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending;
    1085                 :            :         /*
    1086                 :            :          * Short-circuit ignored signals and support queuing
    1087                 :            :          * exactly one non-rt signal, so that we can get more
    1088                 :            :          * detailed information about the cause of the signal.
    1089                 :            :          */
    1090                 :       1953 :         result = TRACE_SIGNAL_ALREADY_PENDING;
    1091   [ +  -  +  + ]:       3906 :         if (legacy_queue(pending, sig))
    1092                 :        152 :                 goto ret;
    1093                 :            : 
    1094                 :       1801 :         result = TRACE_SIGNAL_DELIVERED;
    1095                 :            :         /*
    1096                 :            :          * Skip useless siginfo allocation for SIGKILL and kernel threads.
    1097                 :            :          */
    1098   [ +  -  -  + ]:       1801 :         if ((sig == SIGKILL) || (t->flags & PF_KTHREAD))
    1099                 :          0 :                 goto out_set;
    1100                 :            : 
    1101                 :            :         /*
    1102                 :            :          * Real-time signals must be queued if sent by sigqueue, or
    1103                 :            :          * some other real-time mechanism.  It is implementation
    1104                 :            :          * defined whether kill() does so.  We attempt to do so, on
    1105                 :            :          * the principle of least surprise, but since kill is not
    1106                 :            :          * allowed to fail with EAGAIN when low on memory we just
    1107                 :            :          * make sure at least one signal gets delivered and don't
    1108                 :            :          * pass on the info struct.
    1109                 :            :          */
    1110         [ +  - ]:       1801 :         if (sig < SIGRTMIN)
    1111   [ +  -  -  + ]:       1801 :                 override_rlimit = (is_si_special(info) || info->si_code >= 0);
    1112                 :            :         else
    1113                 :            :                 override_rlimit = 0;
    1114                 :            : 
    1115                 :       1801 :         q = __sigqueue_alloc(sig, t, GFP_ATOMIC, override_rlimit);
    1116         [ +  - ]:       1801 :         if (q) {
    1117      [ -  -  + ]:       1801 :                 list_add_tail(&q->list, &pending->list);
    1118      [ -  -  + ]:       1801 :                 switch ((unsigned long) info) {
    1119                 :          0 :                 case (unsigned long) SEND_SIG_NOINFO:
    1120                 :          0 :                         clear_siginfo(&q->info);
    1121                 :          0 :                         q->info.si_signo = sig;
    1122                 :          0 :                         q->info.si_errno = 0;
    1123                 :          0 :                         q->info.si_code = SI_USER;
    1124                 :          0 :                         q->info.si_pid = task_tgid_nr_ns(current,
    1125                 :            :                                                         task_active_pid_ns(t));
    1126                 :          0 :                         rcu_read_lock();
    1127                 :          0 :                         q->info.si_uid =
    1128         [ #  # ]:          0 :                                 from_kuid_munged(task_cred_xxx(t, user_ns),
    1129                 :          0 :                                                  current_uid());
    1130                 :          0 :                         rcu_read_unlock();
    1131                 :            :                         break;
    1132                 :          0 :                 case (unsigned long) SEND_SIG_PRIV:
    1133                 :          0 :                         clear_siginfo(&q->info);
    1134                 :          0 :                         q->info.si_signo = sig;
    1135                 :          0 :                         q->info.si_errno = 0;
    1136                 :          0 :                         q->info.si_code = SI_KERNEL;
    1137                 :          0 :                         q->info.si_pid = 0;
    1138                 :          0 :                         q->info.si_uid = 0;
    1139                 :          0 :                         break;
    1140                 :       1801 :                 default:
    1141                 :       1801 :                         copy_siginfo(&q->info, info);
    1142                 :            :                         break;
    1143                 :            :                 }
    1144   [ #  #  #  # ]:          0 :         } else if (!is_si_special(info) &&
    1145         [ #  # ]:          0 :                    sig >= SIGRTMIN && info->si_code != SI_USER) {
    1146                 :            :                 /*
    1147                 :            :                  * Queue overflow, abort.  We may abort if the
    1148                 :            :                  * signal was rt and sent by user using something
    1149                 :            :                  * other than kill().
    1150                 :            :                  */
    1151                 :          0 :                 result = TRACE_SIGNAL_OVERFLOW_FAIL;
    1152                 :          0 :                 ret = -EAGAIN;
    1153                 :          0 :                 goto ret;
    1154                 :            :         } else {
    1155                 :            :                 /*
    1156                 :            :                  * This is a silent loss of information.  We still
    1157                 :            :                  * send the signal, but the *info bits are lost.
    1158                 :            :                  */
    1159                 :            :                 result = TRACE_SIGNAL_LOSE_INFO;
    1160                 :            :         }
    1161                 :            : 
    1162                 :       1801 : out_set:
    1163         [ +  + ]:       1801 :         signalfd_notify(t, sig);
    1164         [ -  + ]:       1801 :         sigaddset(&pending->signal, sig);
    1165                 :            : 
    1166                 :            :         /* Let multiprocess signals appear after on-going forks */
    1167         [ -  + ]:       1801 :         if (type > PIDTYPE_TGID) {
    1168                 :          0 :                 struct multiprocess_signals *delayed;
    1169   [ #  #  #  #  :          0 :                 hlist_for_each_entry(delayed, &t->signal->multiprocess, node) {
                   #  # ]
    1170                 :          0 :                         sigset_t *signal = &delayed->signal;
    1171                 :            :                         /* Can't queue both a stop and a continue signal */
    1172         [ #  # ]:          0 :                         if (sig == SIGCONT)
    1173                 :          0 :                                 sigdelsetmask(signal, SIG_KERNEL_STOP_MASK);
    1174   [ #  #  #  # ]:          0 :                         else if (sig_kernel_stop(sig))
    1175                 :          0 :                                 sigdelset(signal, SIGCONT);
    1176         [ #  # ]:          0 :                         sigaddset(signal, sig);
    1177                 :            :                 }
    1178                 :            :         }
    1179                 :            : 
    1180                 :       1801 :         complete_signal(sig, t, type);
    1181                 :       9051 : ret:
    1182                 :       9051 :         trace_signal_generate(sig, info, t, type != PIDTYPE_PID, result);
    1183                 :       9051 :         return ret;
    1184                 :            : }
    1185                 :            : 
    1186                 :       9051 : static inline bool has_si_pid_and_uid(struct kernel_siginfo *info)
    1187                 :            : {
    1188                 :       9051 :         bool ret = false;
    1189                 :       9051 :         switch (siginfo_layout(info->si_signo, info->si_code)) {
    1190                 :            :         case SIL_KILL:
    1191                 :            :         case SIL_CHLD:
    1192                 :            :         case SIL_RT:
    1193                 :       9051 :                 ret = true;
    1194                 :       9051 :                 break;
    1195                 :            :         case SIL_TIMER:
    1196                 :            :         case SIL_POLL:
    1197                 :            :         case SIL_FAULT:
    1198                 :            :         case SIL_FAULT_MCEERR:
    1199                 :            :         case SIL_FAULT_BNDERR:
    1200                 :            :         case SIL_FAULT_PKUERR:
    1201                 :            :         case SIL_SYS:
    1202                 :            :                 ret = false;
    1203                 :            :                 break;
    1204                 :            :         }
    1205                 :       9051 :         return ret;
    1206                 :            : }
    1207                 :            : 
    1208                 :       9051 : static int send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
    1209                 :            :                         enum pid_type type)
    1210                 :            : {
    1211                 :            :         /* Should SIGKILL or SIGSTOP be received by a pid namespace init? */
    1212                 :       9051 :         bool force = false;
    1213                 :            : 
    1214         [ -  + ]:       9051 :         if (info == SEND_SIG_NOINFO) {
    1215                 :            :                 /* Force if sent from an ancestor pid namespace */
    1216                 :          0 :                 force = !task_pid_nr_ns(current, task_active_pid_ns(t));
    1217         [ +  - ]:       9051 :         } else if (info == SEND_SIG_PRIV) {
    1218                 :            :                 /* Don't ignore kernel generated signals */
    1219                 :            :                 force = true;
    1220         [ +  - ]:       9051 :         } else if (has_si_pid_and_uid(info)) {
    1221                 :            :                 /* SIGKILL and SIGSTOP is special or has ids */
    1222                 :       9051 :                 struct user_namespace *t_user_ns;
    1223                 :            : 
    1224                 :       9051 :                 rcu_read_lock();
    1225                 :       9051 :                 t_user_ns = task_cred_xxx(t, user_ns);
    1226         [ -  + ]:       9051 :                 if (current_user_ns() != t_user_ns) {
    1227         [ #  # ]:          0 :                         kuid_t uid = make_kuid(current_user_ns(), info->si_uid);
    1228         [ #  # ]:          0 :                         info->si_uid = from_kuid_munged(t_user_ns, uid);
    1229                 :            :                 }
    1230                 :       9051 :                 rcu_read_unlock();
    1231                 :            : 
    1232                 :            :                 /* A kernel generated signal? */
    1233                 :       9051 :                 force = (info->si_code == SI_KERNEL);
    1234                 :            : 
    1235                 :            :                 /* From an ancestor pid namespace? */
    1236         [ -  + ]:      18102 :                 if (!task_pid_nr_ns(current, task_active_pid_ns(t))) {
    1237                 :          0 :                         info->si_pid = 0;
    1238                 :          0 :                         force = true;
    1239                 :            :                 }
    1240                 :            :         }
    1241                 :       9051 :         return __send_signal(sig, info, t, type, force);
    1242                 :            : }
    1243                 :            : 
    1244                 :          0 : static void print_fatal_signal(int signr)
    1245                 :            : {
    1246                 :          0 :         struct pt_regs *regs = signal_pt_regs();
    1247                 :          0 :         pr_info("potentially unexpected fatal signal %d.\n", signr);
    1248                 :            : 
    1249                 :            : #if defined(__i386__) && !defined(__arch_um__)
    1250                 :            :         pr_info("code at %08lx: ", regs->ip);
    1251                 :            :         {
    1252                 :            :                 int i;
    1253                 :            :                 for (i = 0; i < 16; i++) {
    1254                 :            :                         unsigned char insn;
    1255                 :            : 
    1256                 :            :                         if (get_user(insn, (unsigned char *)(regs->ip + i)))
    1257                 :            :                                 break;
    1258                 :            :                         pr_cont("%02x ", insn);
    1259                 :            :                 }
    1260                 :            :         }
    1261                 :            :         pr_cont("\n");
    1262                 :            : #endif
    1263                 :          0 :         preempt_disable();
    1264                 :          0 :         show_regs(regs);
    1265                 :          0 :         preempt_enable();
    1266                 :          0 : }
    1267                 :            : 
    1268                 :          0 : static int __init setup_print_fatal_signals(char *str)
    1269                 :            : {
    1270                 :          0 :         get_option (&str, &print_fatal_signals);
    1271                 :            : 
    1272                 :          0 :         return 1;
    1273                 :            : }
    1274                 :            : 
    1275                 :            : __setup("print-fatal-signals=", setup_print_fatal_signals);
    1276                 :            : 
    1277                 :            : int
    1278                 :       9009 : __group_send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p)
    1279                 :            : {
    1280                 :          0 :         return send_signal(sig, info, p, PIDTYPE_TGID);
    1281                 :            : }
    1282                 :            : 
    1283                 :         42 : int do_send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p,
    1284                 :            :                         enum pid_type type)
    1285                 :            : {
    1286                 :         42 :         unsigned long flags;
    1287                 :         42 :         int ret = -ESRCH;
    1288                 :            : 
    1289         [ +  - ]:         42 :         if (lock_task_sighand(p, &flags)) {
    1290                 :         42 :                 ret = send_signal(sig, info, p, type);
    1291                 :         42 :                 unlock_task_sighand(p, &flags);
    1292                 :            :         }
    1293                 :            : 
    1294                 :         42 :         return ret;
    1295                 :            : }
    1296                 :            : 
    1297                 :            : /*
    1298                 :            :  * Force a signal that the process can't ignore: if necessary
    1299                 :            :  * we unblock the signal and change any SIG_IGN to SIG_DFL.
    1300                 :            :  *
    1301                 :            :  * Note: If we unblock the signal, we always reset it to SIG_DFL,
    1302                 :            :  * since we do not want to have a signal handler that was blocked
    1303                 :            :  * be invoked when user space had explicitly blocked it.
    1304                 :            :  *
    1305                 :            :  * We don't want to have recursive SIGSEGV's etc, for example,
    1306                 :            :  * that is why we also clear SIGNAL_UNKILLABLE.
    1307                 :            :  */
    1308                 :            : static int
    1309                 :          0 : force_sig_info_to_task(struct kernel_siginfo *info, struct task_struct *t)
    1310                 :            : {
    1311                 :          0 :         unsigned long int flags;
    1312                 :          0 :         int ret, blocked, ignored;
    1313                 :          0 :         struct k_sigaction *action;
    1314                 :          0 :         int sig = info->si_signo;
    1315                 :            : 
    1316                 :          0 :         spin_lock_irqsave(&t->sighand->siglock, flags);
    1317                 :          0 :         action = &t->sighand->action[sig-1];
    1318                 :          0 :         ignored = action->sa.sa_handler == SIG_IGN;
    1319         [ #  # ]:          0 :         blocked = sigismember(&t->blocked, sig);
    1320         [ #  # ]:          0 :         if (blocked || ignored) {
    1321                 :          0 :                 action->sa.sa_handler = SIG_DFL;
    1322         [ #  # ]:          0 :                 if (blocked) {
    1323                 :          0 :                         sigdelset(&t->blocked, sig);
    1324                 :          0 :                         recalc_sigpending_and_wake(t);
    1325                 :            :                 }
    1326                 :            :         }
    1327                 :            :         /*
    1328                 :            :          * Don't clear SIGNAL_UNKILLABLE for traced tasks, users won't expect
    1329                 :            :          * debugging to leave init killable.
    1330                 :            :          */
    1331   [ #  #  #  # ]:          0 :         if (action->sa.sa_handler == SIG_DFL && !t->ptrace)
    1332                 :          0 :                 t->signal->flags &= ~SIGNAL_UNKILLABLE;
    1333                 :          0 :         ret = send_signal(sig, info, t, PIDTYPE_PID);
    1334                 :          0 :         spin_unlock_irqrestore(&t->sighand->siglock, flags);
    1335                 :            : 
    1336                 :          0 :         return ret;
    1337                 :            : }
    1338                 :            : 
    1339                 :          0 : int force_sig_info(struct kernel_siginfo *info)
    1340                 :            : {
    1341                 :          0 :         return force_sig_info_to_task(info, current);
    1342                 :            : }
    1343                 :            : 
    1344                 :            : /*
    1345                 :            :  * Nuke all other threads in the group.
    1346                 :            :  */
    1347                 :          0 : int zap_other_threads(struct task_struct *p)
    1348                 :            : {
    1349                 :          0 :         struct task_struct *t = p;
    1350                 :          0 :         int count = 0;
    1351                 :            : 
    1352                 :          0 :         p->signal->group_stop_count = 0;
    1353                 :            : 
    1354         [ #  # ]:          0 :         while_each_thread(p, t) {
    1355                 :          0 :                 task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK);
    1356                 :          0 :                 count++;
    1357                 :            : 
    1358                 :            :                 /* Don't bother with already dead threads */
    1359         [ #  # ]:          0 :                 if (t->exit_state)
    1360                 :          0 :                         continue;
    1361                 :          0 :                 sigaddset(&t->pending.signal, SIGKILL);
    1362                 :          0 :                 signal_wake_up(t, 1);
    1363                 :            :         }
    1364                 :            : 
    1365                 :          0 :         return count;
    1366                 :            : }
    1367                 :            : 
    1368                 :       2603 : struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
    1369                 :            :                                            unsigned long *flags)
    1370                 :            : {
    1371                 :       2603 :         struct sighand_struct *sighand;
    1372                 :            : 
    1373                 :       2603 :         rcu_read_lock();
    1374                 :       2603 :         for (;;) {
    1375         [ +  - ]:       2603 :                 sighand = rcu_dereference(tsk->sighand);
    1376         [ +  - ]:       2603 :                 if (unlikely(sighand == NULL))
    1377                 :            :                         break;
    1378                 :            : 
    1379                 :            :                 /*
    1380                 :            :                  * This sighand can be already freed and even reused, but
    1381                 :            :                  * we rely on SLAB_TYPESAFE_BY_RCU and sighand_ctor() which
    1382                 :            :                  * initializes ->siglock: this slab can't go away, it has
    1383                 :            :                  * the same object type, ->siglock can't be reinitialized.
    1384                 :            :                  *
    1385                 :            :                  * We need to ensure that tsk->sighand is still the same
    1386                 :            :                  * after we take the lock, we can race with de_thread() or
    1387                 :            :                  * __exit_signal(). In the latter case the next iteration
    1388                 :            :                  * must see ->sighand == NULL.
    1389                 :            :                  */
    1390                 :       2603 :                 spin_lock_irqsave(&sighand->siglock, *flags);
    1391         [ -  + ]:       2603 :                 if (likely(sighand == rcu_access_pointer(tsk->sighand)))
    1392                 :            :                         break;
    1393                 :          0 :                 spin_unlock_irqrestore(&sighand->siglock, *flags);
    1394                 :            :         }
    1395                 :       2603 :         rcu_read_unlock();
    1396                 :            : 
    1397                 :       2603 :         return sighand;
    1398                 :            : }
    1399                 :            : 
    1400                 :            : /*
    1401                 :            :  * send signal info to all the members of a group
    1402                 :            :  */
    1403                 :         42 : int group_send_sig_info(int sig, struct kernel_siginfo *info,
    1404                 :            :                         struct task_struct *p, enum pid_type type)
    1405                 :            : {
    1406                 :         42 :         int ret;
    1407                 :            : 
    1408                 :         42 :         rcu_read_lock();
    1409                 :         42 :         ret = check_kill_permission(sig, info, p);
    1410                 :         42 :         rcu_read_unlock();
    1411                 :            : 
    1412         [ +  - ]:         42 :         if (!ret && sig)
    1413                 :         42 :                 ret = do_send_sig_info(sig, info, p, type);
    1414                 :            : 
    1415                 :         42 :         return ret;
    1416                 :            : }
    1417                 :            : 
    1418                 :            : /*
    1419                 :            :  * __kill_pgrp_info() sends a signal to a process group: this is what the tty
    1420                 :            :  * control characters do (^C, ^Z etc)
    1421                 :            :  * - the caller must hold at least a readlock on tasklist_lock
    1422                 :            :  */
    1423                 :          0 : int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp)
    1424                 :            : {
    1425                 :          0 :         struct task_struct *p = NULL;
    1426                 :          0 :         int retval, success;
    1427                 :            : 
    1428                 :          0 :         success = 0;
    1429                 :          0 :         retval = -ESRCH;
    1430   [ #  #  #  #  :          0 :         do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
                   #  # ]
    1431                 :          0 :                 int err = group_send_sig_info(sig, info, p, PIDTYPE_PGID);
    1432                 :          0 :                 success |= !err;
    1433                 :          0 :                 retval = err;
    1434         [ #  # ]:          0 :         } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
    1435         [ #  # ]:          0 :         return success ? 0 : retval;
    1436                 :            : }
    1437                 :            : 
    1438                 :         42 : int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid)
    1439                 :            : {
    1440                 :         42 :         int error = -ESRCH;
    1441                 :         42 :         struct task_struct *p;
    1442                 :            : 
    1443                 :         42 :         for (;;) {
    1444                 :         42 :                 rcu_read_lock();
    1445                 :         42 :                 p = pid_task(pid, PIDTYPE_PID);
    1446         [ +  - ]:         42 :                 if (p)
    1447                 :         42 :                         error = group_send_sig_info(sig, info, p, PIDTYPE_TGID);
    1448                 :         42 :                 rcu_read_unlock();
    1449         [ -  + ]:         42 :                 if (likely(!p || error != -ESRCH))
    1450                 :         42 :                         return error;
    1451                 :            : 
    1452                 :            :                 /*
    1453                 :            :                  * The task was unhashed in between, try again.  If it
    1454                 :            :                  * is dead, pid_task() will return NULL, if we race with
    1455                 :            :                  * de_thread() it will find the new leader.
    1456                 :            :                  */
    1457                 :            :         }
    1458                 :            : }
    1459                 :            : 
    1460                 :          0 : static int kill_proc_info(int sig, struct kernel_siginfo *info, pid_t pid)
    1461                 :            : {
    1462                 :          0 :         int error;
    1463                 :          0 :         rcu_read_lock();
    1464                 :          0 :         error = kill_pid_info(sig, info, find_vpid(pid));
    1465                 :          0 :         rcu_read_unlock();
    1466                 :          0 :         return error;
    1467                 :            : }
    1468                 :            : 
    1469                 :          0 : static inline bool kill_as_cred_perm(const struct cred *cred,
    1470                 :            :                                      struct task_struct *target)
    1471                 :            : {
    1472                 :          0 :         const struct cred *pcred = __task_cred(target);
    1473                 :            : 
    1474   [ #  #  #  # ]:          0 :         return uid_eq(cred->euid, pcred->suid) ||
    1475         [ #  # ]:          0 :                uid_eq(cred->euid, pcred->uid) ||
    1476   [ #  #  #  # ]:          0 :                uid_eq(cred->uid, pcred->suid) ||
    1477                 :            :                uid_eq(cred->uid, pcred->uid);
    1478                 :            : }
    1479                 :            : 
    1480                 :            : /*
    1481                 :            :  * The usb asyncio usage of siginfo is wrong.  The glibc support
    1482                 :            :  * for asyncio which uses SI_ASYNCIO assumes the layout is SIL_RT.
    1483                 :            :  * AKA after the generic fields:
    1484                 :            :  *      kernel_pid_t    si_pid;
    1485                 :            :  *      kernel_uid32_t  si_uid;
    1486                 :            :  *      sigval_t        si_value;
    1487                 :            :  *
    1488                 :            :  * Unfortunately when usb generates SI_ASYNCIO it assumes the layout
    1489                 :            :  * after the generic fields is:
    1490                 :            :  *      void __user     *si_addr;
    1491                 :            :  *
    1492                 :            :  * This is a practical problem when there is a 64bit big endian kernel
    1493                 :            :  * and a 32bit userspace.  As the 32bit address will encoded in the low
    1494                 :            :  * 32bits of the pointer.  Those low 32bits will be stored at higher
    1495                 :            :  * address than appear in a 32 bit pointer.  So userspace will not
    1496                 :            :  * see the address it was expecting for it's completions.
    1497                 :            :  *
    1498                 :            :  * There is nothing in the encoding that can allow
    1499                 :            :  * copy_siginfo_to_user32 to detect this confusion of formats, so
    1500                 :            :  * handle this by requiring the caller of kill_pid_usb_asyncio to
    1501                 :            :  * notice when this situration takes place and to store the 32bit
    1502                 :            :  * pointer in sival_int, instead of sival_addr of the sigval_t addr
    1503                 :            :  * parameter.
    1504                 :            :  */
    1505                 :          0 : int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr,
    1506                 :            :                          struct pid *pid, const struct cred *cred)
    1507                 :            : {
    1508                 :          0 :         struct kernel_siginfo info;
    1509                 :          0 :         struct task_struct *p;
    1510                 :          0 :         unsigned long flags;
    1511                 :          0 :         int ret = -EINVAL;
    1512                 :            : 
    1513         [ #  # ]:          0 :         clear_siginfo(&info);
    1514                 :          0 :         info.si_signo = sig;
    1515                 :          0 :         info.si_errno = errno;
    1516                 :          0 :         info.si_code = SI_ASYNCIO;
    1517                 :          0 :         *((sigval_t *)&info.si_pid) = addr;
    1518                 :            : 
    1519         [ #  # ]:          0 :         if (!valid_signal(sig))
    1520                 :            :                 return ret;
    1521                 :            : 
    1522                 :          0 :         rcu_read_lock();
    1523                 :          0 :         p = pid_task(pid, PIDTYPE_PID);
    1524         [ #  # ]:          0 :         if (!p) {
    1525                 :          0 :                 ret = -ESRCH;
    1526                 :          0 :                 goto out_unlock;
    1527                 :            :         }
    1528   [ #  #  #  # ]:          0 :         if (!kill_as_cred_perm(cred, p)) {
    1529                 :          0 :                 ret = -EPERM;
    1530                 :          0 :                 goto out_unlock;
    1531                 :            :         }
    1532                 :          0 :         ret = security_task_kill(p, &info, sig, cred);
    1533         [ #  # ]:          0 :         if (ret)
    1534                 :          0 :                 goto out_unlock;
    1535                 :            : 
    1536         [ #  # ]:          0 :         if (sig) {
    1537         [ #  # ]:          0 :                 if (lock_task_sighand(p, &flags)) {
    1538                 :          0 :                         ret = __send_signal(sig, &info, p, PIDTYPE_TGID, false);
    1539                 :          0 :                         unlock_task_sighand(p, &flags);
    1540                 :            :                 } else
    1541                 :            :                         ret = -ESRCH;
    1542                 :            :         }
    1543                 :          0 : out_unlock:
    1544                 :          0 :         rcu_read_unlock();
    1545                 :          0 :         return ret;
    1546                 :            : }
    1547                 :            : EXPORT_SYMBOL_GPL(kill_pid_usb_asyncio);
    1548                 :            : 
    1549                 :            : /*
    1550                 :            :  * kill_something_info() interprets pid in interesting ways just like kill(2).
    1551                 :            :  *
    1552                 :            :  * POSIX specifies that kill(-1,sig) is unspecified, but what we have
    1553                 :            :  * is probably wrong.  Should make it like BSD or SYSV.
    1554                 :            :  */
    1555                 :            : 
    1556                 :         42 : static int kill_something_info(int sig, struct kernel_siginfo *info, pid_t pid)
    1557                 :            : {
    1558                 :         42 :         int ret;
    1559                 :            : 
    1560         [ +  - ]:         42 :         if (pid > 0) {
    1561                 :         42 :                 rcu_read_lock();
    1562                 :         42 :                 ret = kill_pid_info(sig, info, find_vpid(pid));
    1563                 :         42 :                 rcu_read_unlock();
    1564                 :         42 :                 return ret;
    1565                 :            :         }
    1566                 :            : 
    1567                 :            :         /* -INT_MIN is undefined.  Exclude this case to avoid a UBSAN warning */
    1568         [ #  # ]:          0 :         if (pid == INT_MIN)
    1569                 :            :                 return -ESRCH;
    1570                 :            : 
    1571                 :          0 :         read_lock(&tasklist_lock);
    1572         [ #  # ]:          0 :         if (pid != -1) {
    1573         [ #  # ]:          0 :                 ret = __kill_pgrp_info(sig, info,
    1574                 :          0 :                                 pid ? find_vpid(-pid) : task_pgrp(current));
    1575                 :            :         } else {
    1576                 :            :                 int retval = 0, count = 0;
    1577                 :            :                 struct task_struct * p;
    1578                 :            : 
    1579         [ #  # ]:          0 :                 for_each_process(p) {
    1580   [ #  #  #  # ]:          0 :                         if (task_pid_vnr(p) > 1 &&
    1581                 :            :                                         !same_thread_group(p, current)) {
    1582                 :          0 :                                 int err = group_send_sig_info(sig, info, p,
    1583                 :            :                                                               PIDTYPE_MAX);
    1584                 :          0 :                                 ++count;
    1585         [ #  # ]:          0 :                                 if (err != -EPERM)
    1586                 :          0 :                                         retval = err;
    1587                 :            :                         }
    1588                 :            :                 }
    1589         [ #  # ]:          0 :                 ret = count ? retval : -ESRCH;
    1590                 :            :         }
    1591                 :          0 :         read_unlock(&tasklist_lock);
    1592                 :            : 
    1593                 :          0 :         return ret;
    1594                 :            : }
    1595                 :            : 
    1596                 :            : /*
    1597                 :            :  * These are for backward compatibility with the rest of the kernel source.
    1598                 :            :  */
    1599                 :            : 
    1600                 :          0 : int send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p)
    1601                 :            : {
    1602                 :            :         /*
    1603                 :            :          * Make sure legacy kernel users don't send in bad values
    1604                 :            :          * (normal paths check this in check_kill_permission).
    1605                 :            :          */
    1606   [ #  #  #  # ]:          0 :         if (!valid_signal(sig))
    1607                 :            :                 return -EINVAL;
    1608                 :            : 
    1609                 :          0 :         return do_send_sig_info(sig, info, p, PIDTYPE_PID);
    1610                 :            : }
    1611                 :            : EXPORT_SYMBOL(send_sig_info);
    1612                 :            : 
    1613                 :            : #define __si_special(priv) \
    1614                 :            :         ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
    1615                 :            : 
    1616                 :            : int
    1617                 :          0 : send_sig(int sig, struct task_struct *p, int priv)
    1618                 :            : {
    1619         [ #  # ]:          0 :         return send_sig_info(sig, __si_special(priv), p);
    1620                 :            : }
    1621                 :            : EXPORT_SYMBOL(send_sig);
    1622                 :            : 
    1623                 :          0 : void force_sig(int sig)
    1624                 :            : {
    1625                 :          0 :         struct kernel_siginfo info;
    1626                 :            : 
    1627                 :          0 :         clear_siginfo(&info);
    1628                 :          0 :         info.si_signo = sig;
    1629                 :          0 :         info.si_errno = 0;
    1630                 :          0 :         info.si_code = SI_KERNEL;
    1631                 :          0 :         info.si_pid = 0;
    1632                 :          0 :         info.si_uid = 0;
    1633                 :          0 :         force_sig_info(&info);
    1634                 :          0 : }
    1635                 :            : EXPORT_SYMBOL(force_sig);
    1636                 :            : 
    1637                 :            : /*
    1638                 :            :  * When things go south during signal handling, we
    1639                 :            :  * will force a SIGSEGV. And if the signal that caused
    1640                 :            :  * the problem was already a SIGSEGV, we'll want to
    1641                 :            :  * make sure we don't even try to deliver the signal..
    1642                 :            :  */
    1643                 :          0 : void force_sigsegv(int sig)
    1644                 :            : {
    1645         [ #  # ]:          0 :         struct task_struct *p = current;
    1646                 :            : 
    1647         [ #  # ]:          0 :         if (sig == SIGSEGV) {
    1648                 :          0 :                 unsigned long flags;
    1649                 :          0 :                 spin_lock_irqsave(&p->sighand->siglock, flags);
    1650                 :          0 :                 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
    1651                 :          0 :                 spin_unlock_irqrestore(&p->sighand->siglock, flags);
    1652                 :            :         }
    1653                 :          0 :         force_sig(SIGSEGV);
    1654                 :          0 : }
    1655                 :            : 
    1656                 :          0 : int force_sig_fault_to_task(int sig, int code, void __user *addr
    1657                 :            :         ___ARCH_SI_TRAPNO(int trapno)
    1658                 :            :         ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
    1659                 :            :         , struct task_struct *t)
    1660                 :            : {
    1661                 :          0 :         struct kernel_siginfo info;
    1662                 :            : 
    1663                 :          0 :         clear_siginfo(&info);
    1664                 :          0 :         info.si_signo = sig;
    1665                 :          0 :         info.si_errno = 0;
    1666                 :          0 :         info.si_code  = code;
    1667                 :          0 :         info.si_addr  = addr;
    1668                 :            : #ifdef __ARCH_SI_TRAPNO
    1669                 :            :         info.si_trapno = trapno;
    1670                 :            : #endif
    1671                 :            : #ifdef __ia64__
    1672                 :            :         info.si_imm = imm;
    1673                 :            :         info.si_flags = flags;
    1674                 :            :         info.si_isr = isr;
    1675                 :            : #endif
    1676                 :          0 :         return force_sig_info_to_task(&info, t);
    1677                 :            : }
    1678                 :            : 
    1679                 :          0 : int force_sig_fault(int sig, int code, void __user *addr
    1680                 :            :         ___ARCH_SI_TRAPNO(int trapno)
    1681                 :            :         ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr))
    1682                 :            : {
    1683                 :          0 :         return force_sig_fault_to_task(sig, code, addr
    1684                 :            :                                        ___ARCH_SI_TRAPNO(trapno)
    1685                 :            :                                        ___ARCH_SI_IA64(imm, flags, isr), current);
    1686                 :            : }
    1687                 :            : 
    1688                 :          0 : int send_sig_fault(int sig, int code, void __user *addr
    1689                 :            :         ___ARCH_SI_TRAPNO(int trapno)
    1690                 :            :         ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
    1691                 :            :         , struct task_struct *t)
    1692                 :            : {
    1693                 :          0 :         struct kernel_siginfo info;
    1694                 :            : 
    1695         [ #  # ]:          0 :         clear_siginfo(&info);
    1696                 :          0 :         info.si_signo = sig;
    1697                 :          0 :         info.si_errno = 0;
    1698                 :          0 :         info.si_code  = code;
    1699                 :          0 :         info.si_addr  = addr;
    1700                 :            : #ifdef __ARCH_SI_TRAPNO
    1701                 :            :         info.si_trapno = trapno;
    1702                 :            : #endif
    1703                 :            : #ifdef __ia64__
    1704                 :            :         info.si_imm = imm;
    1705                 :            :         info.si_flags = flags;
    1706                 :            :         info.si_isr = isr;
    1707                 :            : #endif
    1708         [ #  # ]:          0 :         return send_sig_info(info.si_signo, &info, t);
    1709                 :            : }
    1710                 :            : 
    1711                 :          0 : int force_sig_mceerr(int code, void __user *addr, short lsb)
    1712                 :            : {
    1713                 :          0 :         struct kernel_siginfo info;
    1714                 :            : 
    1715         [ #  # ]:          0 :         WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
    1716                 :          0 :         clear_siginfo(&info);
    1717                 :          0 :         info.si_signo = SIGBUS;
    1718                 :          0 :         info.si_errno = 0;
    1719                 :          0 :         info.si_code = code;
    1720                 :          0 :         info.si_addr = addr;
    1721                 :          0 :         info.si_addr_lsb = lsb;
    1722                 :          0 :         return force_sig_info(&info);
    1723                 :            : }
    1724                 :            : 
    1725                 :          0 : int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t)
    1726                 :            : {
    1727                 :          0 :         struct kernel_siginfo info;
    1728                 :            : 
    1729         [ #  # ]:          0 :         WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
    1730                 :          0 :         clear_siginfo(&info);
    1731                 :          0 :         info.si_signo = SIGBUS;
    1732                 :          0 :         info.si_errno = 0;
    1733                 :          0 :         info.si_code = code;
    1734                 :          0 :         info.si_addr = addr;
    1735                 :          0 :         info.si_addr_lsb = lsb;
    1736                 :          0 :         return send_sig_info(info.si_signo, &info, t);
    1737                 :            : }
    1738                 :            : EXPORT_SYMBOL(send_sig_mceerr);
    1739                 :            : 
    1740                 :          0 : int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper)
    1741                 :            : {
    1742                 :          0 :         struct kernel_siginfo info;
    1743                 :            : 
    1744                 :          0 :         clear_siginfo(&info);
    1745                 :          0 :         info.si_signo = SIGSEGV;
    1746                 :          0 :         info.si_errno = 0;
    1747                 :          0 :         info.si_code  = SEGV_BNDERR;
    1748                 :          0 :         info.si_addr  = addr;
    1749                 :          0 :         info.si_lower = lower;
    1750                 :          0 :         info.si_upper = upper;
    1751                 :          0 :         return force_sig_info(&info);
    1752                 :            : }
    1753                 :            : 
    1754                 :            : #ifdef SEGV_PKUERR
    1755                 :          0 : int force_sig_pkuerr(void __user *addr, u32 pkey)
    1756                 :            : {
    1757                 :          0 :         struct kernel_siginfo info;
    1758                 :            : 
    1759                 :          0 :         clear_siginfo(&info);
    1760                 :          0 :         info.si_signo = SIGSEGV;
    1761                 :          0 :         info.si_errno = 0;
    1762                 :          0 :         info.si_code  = SEGV_PKUERR;
    1763                 :          0 :         info.si_addr  = addr;
    1764                 :          0 :         info.si_pkey  = pkey;
    1765                 :          0 :         return force_sig_info(&info);
    1766                 :            : }
    1767                 :            : #endif
    1768                 :            : 
    1769                 :            : /* For the crazy architectures that include trap information in
    1770                 :            :  * the errno field, instead of an actual errno value.
    1771                 :            :  */
    1772                 :          0 : int force_sig_ptrace_errno_trap(int errno, void __user *addr)
    1773                 :            : {
    1774                 :          0 :         struct kernel_siginfo info;
    1775                 :            : 
    1776                 :          0 :         clear_siginfo(&info);
    1777                 :          0 :         info.si_signo = SIGTRAP;
    1778                 :          0 :         info.si_errno = errno;
    1779                 :          0 :         info.si_code  = TRAP_HWBKPT;
    1780                 :          0 :         info.si_addr  = addr;
    1781                 :          0 :         return force_sig_info(&info);
    1782                 :            : }
    1783                 :            : 
    1784                 :          0 : int kill_pgrp(struct pid *pid, int sig, int priv)
    1785                 :            : {
    1786                 :          0 :         int ret;
    1787                 :            : 
    1788                 :          0 :         read_lock(&tasklist_lock);
    1789         [ #  # ]:          0 :         ret = __kill_pgrp_info(sig, __si_special(priv), pid);
    1790                 :          0 :         read_unlock(&tasklist_lock);
    1791                 :            : 
    1792                 :          0 :         return ret;
    1793                 :            : }
    1794                 :            : EXPORT_SYMBOL(kill_pgrp);
    1795                 :            : 
    1796                 :          0 : int kill_pid(struct pid *pid, int sig, int priv)
    1797                 :            : {
    1798         [ #  # ]:          0 :         return kill_pid_info(sig, __si_special(priv), pid);
    1799                 :            : }
    1800                 :            : EXPORT_SYMBOL(kill_pid);
    1801                 :            : 
    1802                 :            : /*
    1803                 :            :  * These functions support sending signals using preallocated sigqueue
    1804                 :            :  * structures.  This is needed "because realtime applications cannot
    1805                 :            :  * afford to lose notifications of asynchronous events, like timer
    1806                 :            :  * expirations or I/O completions".  In the case of POSIX Timers
    1807                 :            :  * we allocate the sigqueue structure from the timer_create.  If this
    1808                 :            :  * allocation fails we are able to report the failure to the application
    1809                 :            :  * with an EAGAIN error.
    1810                 :            :  */
    1811                 :          0 : struct sigqueue *sigqueue_alloc(void)
    1812                 :            : {
    1813                 :          0 :         struct sigqueue *q = __sigqueue_alloc(-1, current, GFP_KERNEL, 0);
    1814                 :            : 
    1815         [ #  # ]:          0 :         if (q)
    1816                 :          0 :                 q->flags |= SIGQUEUE_PREALLOC;
    1817                 :            : 
    1818                 :          0 :         return q;
    1819                 :            : }
    1820                 :            : 
    1821                 :          0 : void sigqueue_free(struct sigqueue *q)
    1822                 :            : {
    1823                 :          0 :         unsigned long flags;
    1824         [ #  # ]:          0 :         spinlock_t *lock = &current->sighand->siglock;
    1825                 :            : 
    1826         [ #  # ]:          0 :         BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
    1827                 :            :         /*
    1828                 :            :          * We must hold ->siglock while testing q->list
    1829                 :            :          * to serialize with collect_signal() or with
    1830                 :            :          * __exit_signal()->flush_sigqueue().
    1831                 :            :          */
    1832                 :          0 :         spin_lock_irqsave(lock, flags);
    1833                 :          0 :         q->flags &= ~SIGQUEUE_PREALLOC;
    1834                 :            :         /*
    1835                 :            :          * If it is queued it will be freed when dequeued,
    1836                 :            :          * like the "regular" sigqueue.
    1837                 :            :          */
    1838         [ #  # ]:          0 :         if (!list_empty(&q->list))
    1839                 :          0 :                 q = NULL;
    1840                 :          0 :         spin_unlock_irqrestore(lock, flags);
    1841                 :            : 
    1842         [ #  # ]:          0 :         if (q)
    1843                 :          0 :                 __sigqueue_free(q);
    1844                 :          0 : }
    1845                 :            : 
    1846                 :          0 : int send_sigqueue(struct sigqueue *q, struct pid *pid, enum pid_type type)
    1847                 :            : {
    1848                 :          0 :         int sig = q->info.si_signo;
    1849                 :          0 :         struct sigpending *pending;
    1850                 :          0 :         struct task_struct *t;
    1851                 :          0 :         unsigned long flags;
    1852                 :          0 :         int ret, result;
    1853                 :            : 
    1854         [ #  # ]:          0 :         BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
    1855                 :            : 
    1856                 :          0 :         ret = -1;
    1857                 :          0 :         rcu_read_lock();
    1858                 :          0 :         t = pid_task(pid, type);
    1859   [ #  #  #  # ]:          0 :         if (!t || !likely(lock_task_sighand(t, &flags)))
    1860                 :          0 :                 goto ret;
    1861                 :            : 
    1862                 :          0 :         ret = 1; /* the signal is ignored */
    1863                 :          0 :         result = TRACE_SIGNAL_IGNORED;
    1864         [ #  # ]:          0 :         if (!prepare_signal(sig, t, false))
    1865                 :          0 :                 goto out;
    1866                 :            : 
    1867                 :          0 :         ret = 0;
    1868         [ #  # ]:          0 :         if (unlikely(!list_empty(&q->list))) {
    1869                 :            :                 /*
    1870                 :            :                  * If an SI_TIMER entry is already queue just increment
    1871                 :            :                  * the overrun count.
    1872                 :            :                  */
    1873         [ #  # ]:          0 :                 BUG_ON(q->info.si_code != SI_TIMER);
    1874                 :          0 :                 q->info.si_overrun++;
    1875                 :          0 :                 result = TRACE_SIGNAL_ALREADY_PENDING;
    1876                 :          0 :                 goto out;
    1877                 :            :         }
    1878                 :          0 :         q->info.si_overrun = 0;
    1879                 :            : 
    1880         [ #  # ]:          0 :         signalfd_notify(t, sig);
    1881         [ #  # ]:          0 :         pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending;
    1882                 :          0 :         list_add_tail(&q->list, &pending->list);
    1883                 :          0 :         sigaddset(&pending->signal, sig);
    1884                 :          0 :         complete_signal(sig, t, type);
    1885                 :          0 :         result = TRACE_SIGNAL_DELIVERED;
    1886                 :          0 : out:
    1887                 :          0 :         trace_signal_generate(sig, &q->info, t, type != PIDTYPE_PID, result);
    1888                 :          0 :         unlock_task_sighand(t, &flags);
    1889                 :          0 : ret:
    1890                 :          0 :         rcu_read_unlock();
    1891                 :          0 :         return ret;
    1892                 :            : }
    1893                 :            : 
    1894                 :       9534 : static void do_notify_pidfd(struct task_struct *task)
    1895                 :            : {
    1896                 :       9534 :         struct pid *pid;
    1897                 :            : 
    1898         [ -  + ]:       9534 :         WARN_ON(task->exit_state == 0);
    1899                 :       9534 :         pid = task_pid(task);
    1900                 :       9534 :         wake_up_all(&pid->wait_pidfd);
    1901                 :       9534 : }
    1902                 :            : 
    1903                 :            : /*
    1904                 :            :  * Let a parent know about the death of a child.
    1905                 :            :  * For a stopped/continued status change, use do_notify_parent_cldstop instead.
    1906                 :            :  *
    1907                 :            :  * Returns true if our parent ignored us and so we've switched to
    1908                 :            :  * self-reaping.
    1909                 :            :  */
    1910                 :       9534 : bool do_notify_parent(struct task_struct *tsk, int sig)
    1911                 :            : {
    1912                 :       9534 :         struct kernel_siginfo info;
    1913                 :       9534 :         unsigned long flags;
    1914                 :       9534 :         struct sighand_struct *psig;
    1915                 :       9534 :         bool autoreap = false;
    1916                 :       9534 :         u64 utime, stime;
    1917                 :            : 
    1918         [ -  + ]:       9534 :         BUG_ON(sig == -1);
    1919                 :            : 
    1920                 :            :         /* do_notify_parent_cldstop should have been called instead.  */
    1921         [ -  + ]:       9534 :         BUG_ON(task_is_stopped_or_traced(tsk));
    1922                 :            : 
    1923   [ +  -  +  -  :       9534 :         BUG_ON(!tsk->ptrace &&
                   -  + ]
    1924                 :            :                (tsk->group_leader != tsk || !thread_group_empty(tsk)));
    1925                 :            : 
    1926                 :            :         /* Wake up all pidfd waiters */
    1927                 :       9534 :         do_notify_pidfd(tsk);
    1928                 :            : 
    1929         [ -  + ]:       9534 :         if (sig != SIGCHLD) {
    1930                 :            :                 /*
    1931                 :            :                  * This is only possible if parent == real_parent.
    1932                 :            :                  * Check if it has changed security domain.
    1933                 :            :                  */
    1934         [ #  # ]:          0 :                 if (tsk->parent_exec_id != tsk->parent->self_exec_id)
    1935                 :          0 :                         sig = SIGCHLD;
    1936                 :            :         }
    1937                 :            : 
    1938                 :       9534 :         clear_siginfo(&info);
    1939                 :       9534 :         info.si_signo = sig;
    1940                 :       9534 :         info.si_errno = 0;
    1941                 :            :         /*
    1942                 :            :          * We are under tasklist_lock here so our parent is tied to
    1943                 :            :          * us and cannot change.
    1944                 :            :          *
    1945                 :            :          * task_active_pid_ns will always return the same pid namespace
    1946                 :            :          * until a task passes through release_task.
    1947                 :            :          *
    1948                 :            :          * write_lock() currently calls preempt_disable() which is the
    1949                 :            :          * same as rcu_read_lock(), but according to Oleg, this is not
    1950                 :            :          * correct to rely on this
    1951                 :            :          */
    1952                 :       9534 :         rcu_read_lock();
    1953                 :       9534 :         info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(tsk->parent));
    1954         [ -  + ]:       9534 :         info.si_uid = from_kuid_munged(task_cred_xxx(tsk->parent, user_ns),
    1955                 :       9534 :                                        task_uid(tsk));
    1956                 :       9534 :         rcu_read_unlock();
    1957                 :            : 
    1958                 :       9534 :         task_cputime(tsk, &utime, &stime);
    1959                 :       9534 :         info.si_utime = nsec_to_clock_t(utime + tsk->signal->utime);
    1960                 :       9534 :         info.si_stime = nsec_to_clock_t(stime + tsk->signal->stime);
    1961                 :            : 
    1962                 :       9534 :         info.si_status = tsk->exit_code & 0x7f;
    1963         [ -  + ]:       9534 :         if (tsk->exit_code & 0x80)
    1964                 :          0 :                 info.si_code = CLD_DUMPED;
    1965         [ -  + ]:       9534 :         else if (tsk->exit_code & 0x7f)
    1966                 :          0 :                 info.si_code = CLD_KILLED;
    1967                 :            :         else {
    1968                 :       9534 :                 info.si_code = CLD_EXITED;
    1969                 :       9534 :                 info.si_status = tsk->exit_code >> 8;
    1970                 :            :         }
    1971                 :            : 
    1972                 :       9534 :         psig = tsk->parent->sighand;
    1973                 :       9534 :         spin_lock_irqsave(&psig->siglock, flags);
    1974   [ +  -  +  - ]:       9534 :         if (!tsk->ptrace && sig == SIGCHLD &&
    1975         [ +  + ]:       9534 :             (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
    1976         [ -  + ]:       9009 :              (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
    1977                 :            :                 /*
    1978                 :            :                  * We are exiting and our parent doesn't care.  POSIX.1
    1979                 :            :                  * defines special semantics for setting SIGCHLD to SIG_IGN
    1980                 :            :                  * or setting the SA_NOCLDWAIT flag: we should be reaped
    1981                 :            :                  * automatically and not left for our parent's wait4 call.
    1982                 :            :                  * Rather than having the parent do it as a magic kind of
    1983                 :            :                  * signal handler, we just set this to tell do_exit that we
    1984                 :            :                  * can be cleaned up without becoming a zombie.  Note that
    1985                 :            :                  * we still call __wake_up_parent in this case, because a
    1986                 :            :                  * blocked sys_wait4 might now return -ECHILD.
    1987                 :            :                  *
    1988                 :            :                  * Whether we send SIGCHLD or not for SA_NOCLDWAIT
    1989                 :            :                  * is implementation-defined: we do (if you don't want
    1990                 :            :                  * it, just use SIG_IGN instead).
    1991                 :            :                  */
    1992                 :        525 :                 autoreap = true;
    1993         [ +  - ]:        525 :                 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
    1994                 :        525 :                         sig = 0;
    1995                 :            :         }
    1996   [ +  -  +  + ]:       9534 :         if (valid_signal(sig) && sig)
    1997                 :       9009 :                 __group_send_sig_info(sig, &info, tsk->parent);
    1998                 :       9534 :         __wake_up_parent(tsk, tsk->parent);
    1999                 :       9534 :         spin_unlock_irqrestore(&psig->siglock, flags);
    2000                 :            : 
    2001                 :       9534 :         return autoreap;
    2002                 :            : }
    2003                 :            : 
    2004                 :            : /**
    2005                 :            :  * do_notify_parent_cldstop - notify parent of stopped/continued state change
    2006                 :            :  * @tsk: task reporting the state change
    2007                 :            :  * @for_ptracer: the notification is for ptracer
    2008                 :            :  * @why: CLD_{CONTINUED|STOPPED|TRAPPED} to report
    2009                 :            :  *
    2010                 :            :  * Notify @tsk's parent that the stopped/continued state has changed.  If
    2011                 :            :  * @for_ptracer is %false, @tsk's group leader notifies to its real parent.
    2012                 :            :  * If %true, @tsk reports to @tsk->parent which should be the ptracer.
    2013                 :            :  *
    2014                 :            :  * CONTEXT:
    2015                 :            :  * Must be called with tasklist_lock at least read locked.
    2016                 :            :  */
    2017                 :          0 : static void do_notify_parent_cldstop(struct task_struct *tsk,
    2018                 :            :                                      bool for_ptracer, int why)
    2019                 :            : {
    2020                 :          0 :         struct kernel_siginfo info;
    2021                 :          0 :         unsigned long flags;
    2022                 :          0 :         struct task_struct *parent;
    2023                 :          0 :         struct sighand_struct *sighand;
    2024                 :          0 :         u64 utime, stime;
    2025                 :            : 
    2026         [ #  # ]:          0 :         if (for_ptracer) {
    2027                 :          0 :                 parent = tsk->parent;
    2028                 :            :         } else {
    2029                 :          0 :                 tsk = tsk->group_leader;
    2030                 :          0 :                 parent = tsk->real_parent;
    2031                 :            :         }
    2032                 :            : 
    2033                 :          0 :         clear_siginfo(&info);
    2034                 :          0 :         info.si_signo = SIGCHLD;
    2035                 :          0 :         info.si_errno = 0;
    2036                 :            :         /*
    2037                 :            :          * see comment in do_notify_parent() about the following 4 lines
    2038                 :            :          */
    2039                 :          0 :         rcu_read_lock();
    2040                 :          0 :         info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(parent));
    2041         [ #  # ]:          0 :         info.si_uid = from_kuid_munged(task_cred_xxx(parent, user_ns), task_uid(tsk));
    2042                 :          0 :         rcu_read_unlock();
    2043                 :            : 
    2044                 :          0 :         task_cputime(tsk, &utime, &stime);
    2045                 :          0 :         info.si_utime = nsec_to_clock_t(utime);
    2046                 :          0 :         info.si_stime = nsec_to_clock_t(stime);
    2047                 :            : 
    2048                 :          0 :         info.si_code = why;
    2049   [ #  #  #  # ]:          0 :         switch (why) {
    2050                 :          0 :         case CLD_CONTINUED:
    2051                 :          0 :                 info.si_status = SIGCONT;
    2052                 :          0 :                 break;
    2053                 :          0 :         case CLD_STOPPED:
    2054                 :          0 :                 info.si_status = tsk->signal->group_exit_code & 0x7f;
    2055                 :          0 :                 break;
    2056                 :          0 :         case CLD_TRAPPED:
    2057                 :          0 :                 info.si_status = tsk->exit_code & 0x7f;
    2058                 :          0 :                 break;
    2059                 :          0 :         default:
    2060                 :          0 :                 BUG();
    2061                 :            :         }
    2062                 :            : 
    2063                 :          0 :         sighand = parent->sighand;
    2064                 :          0 :         spin_lock_irqsave(&sighand->siglock, flags);
    2065         [ #  # ]:          0 :         if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
    2066         [ #  # ]:          0 :             !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
    2067                 :          0 :                 __group_send_sig_info(SIGCHLD, &info, parent);
    2068                 :            :         /*
    2069                 :            :          * Even if SIGCHLD is not generated, we must wake up wait4 calls.
    2070                 :            :          */
    2071                 :          0 :         __wake_up_parent(tsk, parent);
    2072                 :          0 :         spin_unlock_irqrestore(&sighand->siglock, flags);
    2073                 :          0 : }
    2074                 :            : 
    2075                 :          0 : static inline bool may_ptrace_stop(void)
    2076                 :            : {
    2077                 :          0 :         if (!likely(current->ptrace))
    2078                 :            :                 return false;
    2079                 :            :         /*
    2080                 :            :          * Are we in the middle of do_coredump?
    2081                 :            :          * If so and our tracer is also part of the coredump stopping
    2082                 :            :          * is a deadlock situation, and pointless because our tracer
    2083                 :            :          * is dead so don't allow us to stop.
    2084                 :            :          * If SIGKILL was already sent before the caller unlocked
    2085                 :            :          * ->siglock we must see ->core_state != NULL. Otherwise it
    2086                 :            :          * is safe to enter schedule().
    2087                 :            :          *
    2088                 :            :          * This is almost outdated, a task with the pending SIGKILL can't
    2089                 :            :          * block in TASK_TRACED. But PTRACE_EVENT_EXIT can be reported
    2090                 :            :          * after SIGKILL was already dequeued.
    2091                 :            :          */
    2092         [ #  # ]:          0 :         if (unlikely(current->mm->core_state) &&
    2093         [ #  # ]:          0 :             unlikely(current->mm == current->parent->mm))
    2094                 :            :                 return false;
    2095                 :            : 
    2096                 :            :         return true;
    2097                 :            : }
    2098                 :            : 
    2099                 :            : /*
    2100                 :            :  * Return non-zero if there is a SIGKILL that should be waking us up.
    2101                 :            :  * Called with the siglock held.
    2102                 :            :  */
    2103                 :            : static bool sigkill_pending(struct task_struct *tsk)
    2104                 :            : {
    2105                 :            :         return sigismember(&tsk->pending.signal, SIGKILL) ||
    2106                 :            :                sigismember(&tsk->signal->shared_pending.signal, SIGKILL);
    2107                 :            : }
    2108                 :            : 
    2109                 :            : /*
    2110                 :            :  * This must be called with current->sighand->siglock held.
    2111                 :            :  *
    2112                 :            :  * This should be the path for all ptrace stops.
    2113                 :            :  * We always set current->last_siginfo while stopped here.
    2114                 :            :  * That makes it a way to test a stopped process for
    2115                 :            :  * being ptrace-stopped vs being job-control-stopped.
    2116                 :            :  *
    2117                 :            :  * If we actually decide not to stop at all because the tracer
    2118                 :            :  * is gone, we keep current->exit_code unless clear_code.
    2119                 :            :  */
    2120                 :          0 : static void ptrace_stop(int exit_code, int why, int clear_code, kernel_siginfo_t *info)
    2121                 :            :         __releases(&current->sighand->siglock)
    2122                 :            :         __acquires(&current->sighand->siglock)
    2123                 :            : {
    2124                 :          0 :         bool gstop_done = false;
    2125                 :            : 
    2126                 :          0 :         if (arch_ptrace_stop_needed(exit_code, info)) {
    2127                 :            :                 /*
    2128                 :            :                  * The arch code has something special to do before a
    2129                 :            :                  * ptrace stop.  This is allowed to block, e.g. for faults
    2130                 :            :                  * on user stack pages.  We can't keep the siglock while
    2131                 :            :                  * calling arch_ptrace_stop, so we must release it now.
    2132                 :            :                  * To preserve proper semantics, we must do this before
    2133                 :            :                  * any signal bookkeeping like checking group_stop_count.
    2134                 :            :                  * Meanwhile, a SIGKILL could come in before we retake the
    2135                 :            :                  * siglock.  That must prevent us from sleeping in TASK_TRACED.
    2136                 :            :                  * So after regaining the lock, we must check for SIGKILL.
    2137                 :            :                  */
    2138                 :            :                 spin_unlock_irq(&current->sighand->siglock);
    2139                 :            :                 arch_ptrace_stop(exit_code, info);
    2140                 :            :                 spin_lock_irq(&current->sighand->siglock);
    2141                 :            :                 if (sigkill_pending(current))
    2142                 :            :                         return;
    2143                 :            :         }
    2144                 :            : 
    2145                 :          0 :         set_special_state(TASK_TRACED);
    2146                 :            : 
    2147                 :            :         /*
    2148                 :            :          * We're committing to trapping.  TRACED should be visible before
    2149                 :            :          * TRAPPING is cleared; otherwise, the tracer might fail do_wait().
    2150                 :            :          * Also, transition to TRACED and updates to ->jobctl should be
    2151                 :            :          * atomic with respect to siglock and should be done after the arch
    2152                 :            :          * hook as siglock is released and regrabbed across it.
    2153                 :            :          *
    2154                 :            :          *     TRACER                               TRACEE
    2155                 :            :          *
    2156                 :            :          *     ptrace_attach()
    2157                 :            :          * [L]   wait_on_bit(JOBCTL_TRAPPING)   [S] set_special_state(TRACED)
    2158                 :            :          *     do_wait()
    2159                 :            :          *       set_current_state()                smp_wmb();
    2160                 :            :          *       ptrace_do_wait()
    2161                 :            :          *         wait_task_stopped()
    2162                 :            :          *           task_stopped_code()
    2163                 :            :          * [L]         task_is_traced()         [S] task_clear_jobctl_trapping();
    2164                 :            :          */
    2165                 :          0 :         smp_wmb();
    2166                 :            : 
    2167         [ #  # ]:          0 :         current->last_siginfo = info;
    2168                 :          0 :         current->exit_code = exit_code;
    2169                 :            : 
    2170                 :            :         /*
    2171                 :            :          * If @why is CLD_STOPPED, we're trapping to participate in a group
    2172                 :            :          * stop.  Do the bookkeeping.  Note that if SIGCONT was delievered
    2173                 :            :          * across siglock relocks since INTERRUPT was scheduled, PENDING
    2174                 :            :          * could be clear now.  We act as if SIGCONT is received after
    2175                 :            :          * TASK_TRACED is entered - ignore it.
    2176                 :            :          */
    2177   [ #  #  #  # ]:          0 :         if (why == CLD_STOPPED && (current->jobctl & JOBCTL_STOP_PENDING))
    2178                 :          0 :                 gstop_done = task_participate_group_stop(current);
    2179                 :            : 
    2180                 :            :         /* any trap clears pending STOP trap, STOP trap clears NOTIFY */
    2181                 :          0 :         task_clear_jobctl_pending(current, JOBCTL_TRAP_STOP);
    2182   [ #  #  #  # ]:          0 :         if (info && info->si_code >> 8 == PTRACE_EVENT_STOP)
    2183                 :          0 :                 task_clear_jobctl_pending(current, JOBCTL_TRAP_NOTIFY);
    2184                 :            : 
    2185                 :            :         /* entering a trap, clear TRAPPING */
    2186                 :          0 :         task_clear_jobctl_trapping(current);
    2187                 :            : 
    2188                 :          0 :         spin_unlock_irq(&current->sighand->siglock);
    2189                 :          0 :         read_lock(&tasklist_lock);
    2190         [ #  # ]:          0 :         if (may_ptrace_stop()) {
    2191                 :            :                 /*
    2192                 :            :                  * Notify parents of the stop.
    2193                 :            :                  *
    2194                 :            :                  * While ptraced, there are two parents - the ptracer and
    2195                 :            :                  * the real_parent of the group_leader.  The ptracer should
    2196                 :            :                  * know about every stop while the real parent is only
    2197                 :            :                  * interested in the completion of group stop.  The states
    2198                 :            :                  * for the two don't interact with each other.  Notify
    2199                 :            :                  * separately unless they're gonna be duplicates.
    2200                 :            :                  */
    2201                 :          0 :                 do_notify_parent_cldstop(current, true, why);
    2202   [ #  #  #  # ]:          0 :                 if (gstop_done && ptrace_reparented(current))
    2203                 :          0 :                         do_notify_parent_cldstop(current, false, why);
    2204                 :            : 
    2205                 :            :                 /*
    2206                 :            :                  * Don't want to allow preemption here, because
    2207                 :            :                  * sys_ptrace() needs this task to be inactive.
    2208                 :            :                  *
    2209                 :            :                  * XXX: implement read_unlock_no_resched().
    2210                 :            :                  */
    2211                 :          0 :                 preempt_disable();
    2212                 :          0 :                 read_unlock(&tasklist_lock);
    2213                 :          0 :                 cgroup_enter_frozen();
    2214                 :          0 :                 preempt_enable_no_resched();
    2215                 :          0 :                 freezable_schedule();
    2216                 :          0 :                 cgroup_leave_frozen(true);
    2217                 :            :         } else {
    2218                 :            :                 /*
    2219                 :            :                  * By the time we got the lock, our tracer went away.
    2220                 :            :                  * Don't drop the lock yet, another tracer may come.
    2221                 :            :                  *
    2222                 :            :                  * If @gstop_done, the ptracer went away between group stop
    2223                 :            :                  * completion and here.  During detach, it would have set
    2224                 :            :                  * JOBCTL_STOP_PENDING on us and we'll re-enter
    2225                 :            :                  * TASK_STOPPED in do_signal_stop() on return, so notifying
    2226                 :            :                  * the real parent of the group stop completion is enough.
    2227                 :            :                  */
    2228         [ #  # ]:          0 :                 if (gstop_done)
    2229                 :          0 :                         do_notify_parent_cldstop(current, false, why);
    2230                 :            : 
    2231                 :            :                 /* tasklist protects us from ptrace_freeze_traced() */
    2232         [ #  # ]:          0 :                 __set_current_state(TASK_RUNNING);
    2233         [ #  # ]:          0 :                 if (clear_code)
    2234                 :          0 :                         current->exit_code = 0;
    2235                 :          0 :                 read_unlock(&tasklist_lock);
    2236                 :            :         }
    2237                 :            : 
    2238                 :            :         /*
    2239                 :            :          * We are back.  Now reacquire the siglock before touching
    2240                 :            :          * last_siginfo, so that we are sure to have synchronized with
    2241                 :            :          * any signal-sending on another CPU that wants to examine it.
    2242                 :            :          */
    2243                 :          0 :         spin_lock_irq(&current->sighand->siglock);
    2244                 :          0 :         current->last_siginfo = NULL;
    2245                 :            : 
    2246                 :            :         /* LISTENING can be set only during STOP traps, clear it */
    2247                 :          0 :         current->jobctl &= ~JOBCTL_LISTENING;
    2248                 :            : 
    2249                 :            :         /*
    2250                 :            :          * Queued signals ignored us while we were stopped for tracing.
    2251                 :            :          * So check for any that we should take before resuming user mode.
    2252                 :            :          * This sets TIF_SIGPENDING, but never clears it.
    2253                 :            :          */
    2254                 :          0 :         recalc_sigpending_tsk(current);
    2255                 :            : }
    2256                 :            : 
    2257                 :          0 : static void ptrace_do_notify(int signr, int exit_code, int why)
    2258                 :            : {
    2259                 :          0 :         kernel_siginfo_t info;
    2260                 :            : 
    2261                 :          0 :         clear_siginfo(&info);
    2262                 :          0 :         info.si_signo = signr;
    2263                 :          0 :         info.si_code = exit_code;
    2264                 :          0 :         info.si_pid = task_pid_vnr(current);
    2265         [ #  # ]:          0 :         info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
    2266                 :            : 
    2267                 :            :         /* Let the debugger run.  */
    2268                 :          0 :         ptrace_stop(exit_code, why, 1, &info);
    2269                 :          0 : }
    2270                 :            : 
    2271                 :          0 : void ptrace_notify(int exit_code)
    2272                 :            : {
    2273         [ #  # ]:          0 :         BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP);
    2274         [ #  # ]:          0 :         if (unlikely(current->task_works))
    2275                 :          0 :                 task_work_run();
    2276                 :            : 
    2277                 :          0 :         spin_lock_irq(&current->sighand->siglock);
    2278                 :          0 :         ptrace_do_notify(SIGTRAP, exit_code, CLD_TRAPPED);
    2279                 :          0 :         spin_unlock_irq(&current->sighand->siglock);
    2280                 :          0 : }
    2281                 :            : 
    2282                 :            : /**
    2283                 :            :  * do_signal_stop - handle group stop for SIGSTOP and other stop signals
    2284                 :            :  * @signr: signr causing group stop if initiating
    2285                 :            :  *
    2286                 :            :  * If %JOBCTL_STOP_PENDING is not set yet, initiate group stop with @signr
    2287                 :            :  * and participate in it.  If already set, participate in the existing
    2288                 :            :  * group stop.  If participated in a group stop (and thus slept), %true is
    2289                 :            :  * returned with siglock released.
    2290                 :            :  *
    2291                 :            :  * If ptraced, this function doesn't handle stop itself.  Instead,
    2292                 :            :  * %JOBCTL_TRAP_STOP is scheduled and %false is returned with siglock
    2293                 :            :  * untouched.  The caller must ensure that INTERRUPT trap handling takes
    2294                 :            :  * places afterwards.
    2295                 :            :  *
    2296                 :            :  * CONTEXT:
    2297                 :            :  * Must be called with @current->sighand->siglock held, which is released
    2298                 :            :  * on %true return.
    2299                 :            :  *
    2300                 :            :  * RETURNS:
    2301                 :            :  * %false if group stop is already cancelled or ptrace trap is scheduled.
    2302                 :            :  * %true if participated in group stop.
    2303                 :            :  */
    2304                 :          0 : static bool do_signal_stop(int signr)
    2305                 :            :         __releases(&current->sighand->siglock)
    2306                 :            : {
    2307         [ #  # ]:          0 :         struct signal_struct *sig = current->signal;
    2308                 :            : 
    2309         [ #  # ]:          0 :         if (!(current->jobctl & JOBCTL_STOP_PENDING)) {
    2310                 :          0 :                 unsigned long gstop = JOBCTL_STOP_PENDING | JOBCTL_STOP_CONSUME;
    2311                 :          0 :                 struct task_struct *t;
    2312                 :            : 
    2313                 :            :                 /* signr will be recorded in task->jobctl for retries */
    2314         [ #  # ]:          0 :                 WARN_ON_ONCE(signr & ~JOBCTL_STOP_SIGMASK);
    2315                 :            : 
    2316         [ #  # ]:          0 :                 if (!likely(current->jobctl & JOBCTL_STOP_DEQUEUED) ||
    2317   [ #  #  #  # ]:          0 :                     unlikely(signal_group_exit(sig)))
    2318                 :            :                         return false;
    2319                 :            :                 /*
    2320                 :            :                  * There is no group stop already in progress.  We must
    2321                 :            :                  * initiate one now.
    2322                 :            :                  *
    2323                 :            :                  * While ptraced, a task may be resumed while group stop is
    2324                 :            :                  * still in effect and then receive a stop signal and
    2325                 :            :                  * initiate another group stop.  This deviates from the
    2326                 :            :                  * usual behavior as two consecutive stop signals can't
    2327                 :            :                  * cause two group stops when !ptraced.  That is why we
    2328                 :            :                  * also check !task_is_stopped(t) below.
    2329                 :            :                  *
    2330                 :            :                  * The condition can be distinguished by testing whether
    2331                 :            :                  * SIGNAL_STOP_STOPPED is already set.  Don't generate
    2332                 :            :                  * group_exit_code in such case.
    2333                 :            :                  *
    2334                 :            :                  * This is not necessary for SIGNAL_STOP_CONTINUED because
    2335                 :            :                  * an intervening stop signal is required to cause two
    2336                 :            :                  * continued events regardless of ptrace.
    2337                 :            :                  */
    2338         [ #  # ]:          0 :                 if (!(sig->flags & SIGNAL_STOP_STOPPED))
    2339                 :          0 :                         sig->group_exit_code = signr;
    2340                 :            : 
    2341                 :          0 :                 sig->group_stop_count = 0;
    2342                 :            : 
    2343         [ #  # ]:          0 :                 if (task_set_jobctl_pending(current, signr | gstop))
    2344                 :          0 :                         sig->group_stop_count++;
    2345                 :            : 
    2346                 :          0 :                 t = current;
    2347         [ #  # ]:          0 :                 while_each_thread(current, t) {
    2348                 :            :                         /*
    2349                 :            :                          * Setting state to TASK_STOPPED for a group
    2350                 :            :                          * stop is always done with the siglock held,
    2351                 :            :                          * so this check has no races.
    2352                 :            :                          */
    2353   [ #  #  #  # ]:          0 :                         if (!task_is_stopped(t) &&
    2354                 :          0 :                             task_set_jobctl_pending(t, signr | gstop)) {
    2355                 :          0 :                                 sig->group_stop_count++;
    2356         [ #  # ]:          0 :                                 if (likely(!(t->ptrace & PT_SEIZED)))
    2357                 :          0 :                                         signal_wake_up(t, 0);
    2358                 :            :                                 else
    2359                 :          0 :                                         ptrace_trap_notify(t);
    2360                 :            :                         }
    2361                 :            :                 }
    2362                 :            :         }
    2363                 :            : 
    2364         [ #  # ]:          0 :         if (likely(!current->ptrace)) {
    2365                 :          0 :                 int notify = 0;
    2366                 :            : 
    2367                 :            :                 /*
    2368                 :            :                  * If there are no other threads in the group, or if there
    2369                 :            :                  * is a group stop in progress and we are the last to stop,
    2370                 :            :                  * report to the parent.
    2371                 :            :                  */
    2372         [ #  # ]:          0 :                 if (task_participate_group_stop(current))
    2373                 :          0 :                         notify = CLD_STOPPED;
    2374                 :            : 
    2375                 :          0 :                 set_special_state(TASK_STOPPED);
    2376                 :          0 :                 spin_unlock_irq(&current->sighand->siglock);
    2377                 :            : 
    2378                 :            :                 /*
    2379                 :            :                  * Notify the parent of the group stop completion.  Because
    2380                 :            :                  * we're not holding either the siglock or tasklist_lock
    2381                 :            :                  * here, ptracer may attach inbetween; however, this is for
    2382                 :            :                  * group stop and should always be delivered to the real
    2383                 :            :                  * parent of the group leader.  The new ptracer will get
    2384                 :            :                  * its notification when this task transitions into
    2385                 :            :                  * TASK_TRACED.
    2386                 :            :                  */
    2387         [ #  # ]:          0 :                 if (notify) {
    2388                 :          0 :                         read_lock(&tasklist_lock);
    2389                 :          0 :                         do_notify_parent_cldstop(current, false, notify);
    2390                 :          0 :                         read_unlock(&tasklist_lock);
    2391                 :            :                 }
    2392                 :            : 
    2393                 :            :                 /* Now we don't run again until woken by SIGCONT or SIGKILL */
    2394                 :          0 :                 cgroup_enter_frozen();
    2395                 :          0 :                 freezable_schedule();
    2396                 :          0 :                 return true;
    2397                 :            :         } else {
    2398                 :            :                 /*
    2399                 :            :                  * While ptraced, group stop is handled by STOP trap.
    2400                 :            :                  * Schedule it and let the caller deal with it.
    2401                 :            :                  */
    2402                 :          0 :                 task_set_jobctl_pending(current, JOBCTL_TRAP_STOP);
    2403                 :          0 :                 return false;
    2404                 :            :         }
    2405                 :            : }
    2406                 :            : 
    2407                 :            : /**
    2408                 :            :  * do_jobctl_trap - take care of ptrace jobctl traps
    2409                 :            :  *
    2410                 :            :  * When PT_SEIZED, it's used for both group stop and explicit
    2411                 :            :  * SEIZE/INTERRUPT traps.  Both generate PTRACE_EVENT_STOP trap with
    2412                 :            :  * accompanying siginfo.  If stopped, lower eight bits of exit_code contain
    2413                 :            :  * the stop signal; otherwise, %SIGTRAP.
    2414                 :            :  *
    2415                 :            :  * When !PT_SEIZED, it's used only for group stop trap with stop signal
    2416                 :            :  * number as exit_code and no siginfo.
    2417                 :            :  *
    2418                 :            :  * CONTEXT:
    2419                 :            :  * Must be called with @current->sighand->siglock held, which may be
    2420                 :            :  * released and re-acquired before returning with intervening sleep.
    2421                 :            :  */
    2422                 :          0 : static void do_jobctl_trap(void)
    2423                 :            : {
    2424         [ #  # ]:          0 :         struct signal_struct *signal = current->signal;
    2425                 :          0 :         int signr = current->jobctl & JOBCTL_STOP_SIGMASK;
    2426                 :            : 
    2427         [ #  # ]:          0 :         if (current->ptrace & PT_SEIZED) {
    2428         [ #  # ]:          0 :                 if (!signal->group_stop_count &&
    2429                 :            :                     !(signal->flags & SIGNAL_STOP_STOPPED))
    2430                 :          0 :                         signr = SIGTRAP;
    2431         [ #  # ]:          0 :                 WARN_ON_ONCE(!signr);
    2432                 :          0 :                 ptrace_do_notify(signr, signr | (PTRACE_EVENT_STOP << 8),
    2433                 :            :                                  CLD_STOPPED);
    2434                 :            :         } else {
    2435         [ #  # ]:          0 :                 WARN_ON_ONCE(!signr);
    2436                 :          0 :                 ptrace_stop(signr, CLD_STOPPED, 0, NULL);
    2437                 :          0 :                 current->exit_code = 0;
    2438                 :            :         }
    2439                 :          0 : }
    2440                 :            : 
    2441                 :            : /**
    2442                 :            :  * do_freezer_trap - handle the freezer jobctl trap
    2443                 :            :  *
    2444                 :            :  * Puts the task into frozen state, if only the task is not about to quit.
    2445                 :            :  * In this case it drops JOBCTL_TRAP_FREEZE.
    2446                 :            :  *
    2447                 :            :  * CONTEXT:
    2448                 :            :  * Must be called with @current->sighand->siglock held,
    2449                 :            :  * which is always released before returning.
    2450                 :            :  */
    2451                 :          0 : static void do_freezer_trap(void)
    2452                 :            :         __releases(&current->sighand->siglock)
    2453                 :            : {
    2454                 :            :         /*
    2455                 :            :          * If there are other trap bits pending except JOBCTL_TRAP_FREEZE,
    2456                 :            :          * let's make another loop to give it a chance to be handled.
    2457                 :            :          * In any case, we'll return back.
    2458                 :            :          */
    2459         [ #  # ]:          0 :         if ((current->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) !=
    2460                 :            :              JOBCTL_TRAP_FREEZE) {
    2461                 :          0 :                 spin_unlock_irq(&current->sighand->siglock);
    2462                 :          0 :                 return;
    2463                 :            :         }
    2464                 :            : 
    2465                 :            :         /*
    2466                 :            :          * Now we're sure that there is no pending fatal signal and no
    2467                 :            :          * pending traps. Clear TIF_SIGPENDING to not get out of schedule()
    2468                 :            :          * immediately (if there is a non-fatal signal pending), and
    2469                 :            :          * put the task into sleep.
    2470                 :            :          */
    2471                 :          0 :         __set_current_state(TASK_INTERRUPTIBLE);
    2472                 :          0 :         clear_thread_flag(TIF_SIGPENDING);
    2473                 :          0 :         spin_unlock_irq(&current->sighand->siglock);
    2474                 :          0 :         cgroup_enter_frozen();
    2475                 :          0 :         freezable_schedule();
    2476                 :            : }
    2477                 :            : 
    2478                 :          0 : static int ptrace_signal(int signr, kernel_siginfo_t *info)
    2479                 :            : {
    2480                 :            :         /*
    2481                 :            :          * We do not check sig_kernel_stop(signr) but set this marker
    2482                 :            :          * unconditionally because we do not know whether debugger will
    2483                 :            :          * change signr. This flag has no meaning unless we are going
    2484                 :            :          * to stop after return from ptrace_stop(). In this case it will
    2485                 :            :          * be checked in do_signal_stop(), we should only stop if it was
    2486                 :            :          * not cleared by SIGCONT while we were sleeping. See also the
    2487                 :            :          * comment in dequeue_signal().
    2488                 :            :          */
    2489                 :          0 :         current->jobctl |= JOBCTL_STOP_DEQUEUED;
    2490                 :          0 :         ptrace_stop(signr, CLD_TRAPPED, 0, info);
    2491                 :            : 
    2492                 :            :         /* We're back.  Did the debugger cancel the sig?  */
    2493         [ #  # ]:          0 :         signr = current->exit_code;
    2494         [ #  # ]:          0 :         if (signr == 0)
    2495                 :            :                 return signr;
    2496                 :            : 
    2497         [ #  # ]:          0 :         current->exit_code = 0;
    2498                 :            : 
    2499                 :            :         /*
    2500                 :            :          * Update the siginfo structure if the signal has
    2501                 :            :          * changed.  If the debugger wanted something
    2502                 :            :          * specific in the siginfo structure then it should
    2503                 :            :          * have updated *info via PTRACE_SETSIGINFO.
    2504                 :            :          */
    2505         [ #  # ]:          0 :         if (signr != info->si_signo) {
    2506                 :          0 :                 clear_siginfo(info);
    2507                 :          0 :                 info->si_signo = signr;
    2508                 :          0 :                 info->si_errno = 0;
    2509                 :          0 :                 info->si_code = SI_USER;
    2510                 :          0 :                 rcu_read_lock();
    2511                 :          0 :                 info->si_pid = task_pid_vnr(current->parent);
    2512                 :          0 :                 info->si_uid = from_kuid_munged(current_user_ns(),
    2513         [ #  # ]:          0 :                                                 task_uid(current->parent));
    2514                 :          0 :                 rcu_read_unlock();
    2515                 :            :         }
    2516                 :            : 
    2517                 :            :         /* If the (new) signal is now blocked, requeue it.  */
    2518         [ #  # ]:          0 :         if (sigismember(&current->blocked, signr)) {
    2519                 :          0 :                 send_signal(signr, info, current, PIDTYPE_PID);
    2520                 :          0 :                 signr = 0;
    2521                 :            :         }
    2522                 :            : 
    2523                 :            :         return signr;
    2524                 :            : }
    2525                 :            : 
    2526                 :      35609 : bool get_signal(struct ksignal *ksig)
    2527                 :            : {
    2528         [ -  + ]:      35609 :         struct sighand_struct *sighand = current->sighand;
    2529                 :      35609 :         struct signal_struct *signal = current->signal;
    2530                 :      35609 :         int signr;
    2531                 :            : 
    2532         [ -  + ]:      35609 :         if (unlikely(current->task_works))
    2533                 :          0 :                 task_work_run();
    2534                 :            : 
    2535         [ +  - ]:      35609 :         if (unlikely(uprobe_deny_signal()))
    2536                 :            :                 return false;
    2537                 :            : 
    2538                 :            :         /*
    2539                 :            :          * Do this once, we can't return to user-mode if freezing() == T.
    2540                 :            :          * do_signal_stop() and ptrace_stop() do freezable_schedule() and
    2541                 :            :          * thus do not need another check after return.
    2542                 :            :          */
    2543                 :      35609 :         try_to_freeze();
    2544                 :            : 
    2545                 :            : relock:
    2546                 :      35609 :         spin_lock_irq(&sighand->siglock);
    2547                 :            :         /*
    2548                 :            :          * Every stopped thread goes here after wakeup. Check to see if
    2549                 :            :          * we should notify the parent, prepare_signal(SIGCONT) encodes
    2550                 :            :          * the CLD_ si_code into SIGNAL_CLD_MASK bits.
    2551                 :            :          */
    2552         [ -  + ]:      35609 :         if (unlikely(signal->flags & SIGNAL_CLD_MASK)) {
    2553                 :          0 :                 int why;
    2554                 :            : 
    2555         [ #  # ]:          0 :                 if (signal->flags & SIGNAL_CLD_CONTINUED)
    2556                 :            :                         why = CLD_CONTINUED;
    2557                 :            :                 else
    2558                 :          0 :                         why = CLD_STOPPED;
    2559                 :            : 
    2560                 :          0 :                 signal->flags &= ~SIGNAL_CLD_MASK;
    2561                 :            : 
    2562                 :          0 :                 spin_unlock_irq(&sighand->siglock);
    2563                 :            : 
    2564                 :            :                 /*
    2565                 :            :                  * Notify the parent that we're continuing.  This event is
    2566                 :            :                  * always per-process and doesn't make whole lot of sense
    2567                 :            :                  * for ptracers, who shouldn't consume the state via
    2568                 :            :                  * wait(2) either, but, for backward compatibility, notify
    2569                 :            :                  * the ptracer of the group leader too unless it's gonna be
    2570                 :            :                  * a duplicate.
    2571                 :            :                  */
    2572                 :          0 :                 read_lock(&tasklist_lock);
    2573                 :          0 :                 do_notify_parent_cldstop(current, false, why);
    2574                 :            : 
    2575         [ #  # ]:          0 :                 if (ptrace_reparented(current->group_leader))
    2576                 :          0 :                         do_notify_parent_cldstop(current->group_leader,
    2577                 :            :                                                 true, why);
    2578                 :          0 :                 read_unlock(&tasklist_lock);
    2579                 :            : 
    2580                 :          0 :                 goto relock;
    2581                 :            :         }
    2582                 :            : 
    2583                 :            :         /* Has this task already been marked for death? */
    2584         [ +  - ]:      35609 :         if (signal_group_exit(signal)) {
    2585                 :          0 :                 ksig->info.si_signo = signr = SIGKILL;
    2586                 :          0 :                 sigdelset(&current->pending.signal, SIGKILL);
    2587                 :          0 :                 trace_signal_deliver(SIGKILL, SEND_SIG_NOINFO,
    2588                 :            :                                 &sighand->action[SIGKILL - 1]);
    2589                 :          0 :                 recalc_sigpending();
    2590                 :          0 :                 goto fatal;
    2591                 :            :         }
    2592                 :            : 
    2593                 :      35714 :         for (;;) {
    2594                 :      35714 :                 struct k_sigaction *ka;
    2595                 :            : 
    2596   [ -  +  -  - ]:      35714 :                 if (unlikely(current->jobctl & JOBCTL_STOP_PENDING) &&
    2597                 :          0 :                     do_signal_stop(0))
    2598                 :          0 :                         goto relock;
    2599                 :            : 
    2600         [ -  + ]:      35714 :                 if (unlikely(current->jobctl &
    2601                 :            :                              (JOBCTL_TRAP_MASK | JOBCTL_TRAP_FREEZE))) {
    2602         [ #  # ]:          0 :                         if (current->jobctl & JOBCTL_TRAP_MASK) {
    2603                 :          0 :                                 do_jobctl_trap();
    2604                 :          0 :                                 spin_unlock_irq(&sighand->siglock);
    2605         [ #  # ]:          0 :                         } else if (current->jobctl & JOBCTL_TRAP_FREEZE)
    2606                 :          0 :                                 do_freezer_trap();
    2607                 :            : 
    2608                 :          0 :                         goto relock;
    2609                 :            :                 }
    2610                 :            : 
    2611                 :            :                 /*
    2612                 :            :                  * If the task is leaving the frozen state, let's update
    2613                 :            :                  * cgroup counters and reset the frozen bit.
    2614                 :            :                  */
    2615         [ -  + ]:      35714 :                 if (unlikely(cgroup_task_frozen(current))) {
    2616                 :          0 :                         spin_unlock_irq(&sighand->siglock);
    2617                 :          0 :                         cgroup_leave_frozen(false);
    2618                 :          0 :                         goto relock;
    2619                 :            :                 }
    2620                 :            : 
    2621                 :            :                 /*
    2622                 :            :                  * Signals generated by the execution of an instruction
    2623                 :            :                  * need to be delivered before any other pending signals
    2624                 :            :                  * so that the instruction pointer in the signal stack
    2625                 :            :                  * frame points to the faulting instruction.
    2626                 :            :                  */
    2627                 :      35714 :                 signr = dequeue_synchronous_signal(&ksig->info);
    2628         [ +  - ]:      35714 :                 if (!signr)
    2629                 :      35714 :                         signr = dequeue_signal(current, &current->blocked, &ksig->info);
    2630                 :            : 
    2631         [ +  + ]:      35714 :                 if (!signr)
    2632                 :            :                         break; /* will return 0 */
    2633                 :            : 
    2634   [ -  +  -  - ]:       1155 :                 if (unlikely(current->ptrace) && signr != SIGKILL) {
    2635                 :          0 :                         signr = ptrace_signal(signr, &ksig->info);
    2636         [ #  # ]:          0 :                         if (!signr)
    2637                 :          0 :                                 continue;
    2638                 :            :                 }
    2639                 :            : 
    2640                 :       1155 :                 ka = &sighand->action[signr-1];
    2641                 :            : 
    2642                 :            :                 /* Trace actually delivered signals. */
    2643                 :       1155 :                 trace_signal_deliver(signr, &ksig->info, ka);
    2644                 :            : 
    2645         [ -  + ]:       1155 :                 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing.  */
    2646                 :          0 :                         continue;
    2647         [ +  + ]:       1155 :                 if (ka->sa.sa_handler != SIG_DFL) {
    2648                 :            :                         /* Run the handler.  */
    2649                 :       1050 :                         ksig->ka = *ka;
    2650                 :            : 
    2651         [ -  + ]:       1050 :                         if (ka->sa.sa_flags & SA_ONESHOT)
    2652                 :          0 :                                 ka->sa.sa_handler = SIG_DFL;
    2653                 :            : 
    2654                 :            :                         break; /* will return non-zero "signr" value */
    2655                 :            :                 }
    2656                 :            : 
    2657                 :            :                 /*
    2658                 :            :                  * Now we are doing the default action for this signal.
    2659                 :            :                  */
    2660   [ +  -  +  - ]:        105 :                 if (sig_kernel_ignore(signr)) /* Default is nothing. */
    2661                 :        105 :                         continue;
    2662                 :            : 
    2663                 :            :                 /*
    2664                 :            :                  * Global init gets no signals it doesn't want.
    2665                 :            :                  * Container-init gets no signals it doesn't want from same
    2666                 :            :                  * container.
    2667                 :            :                  *
    2668                 :            :                  * Note that if global/container-init sees a sig_kernel_only()
    2669                 :            :                  * signal here, the signal must have been generated internally
    2670                 :            :                  * or must have come from an ancestor namespace. In either
    2671                 :            :                  * case, the signal cannot be dropped.
    2672                 :            :                  */
    2673   [ #  #  #  # ]:          0 :                 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) &&
    2674         [ #  # ]:          0 :                                 !sig_kernel_only(signr))
    2675                 :          0 :                         continue;
    2676                 :            : 
    2677   [ #  #  #  # ]:          0 :                 if (sig_kernel_stop(signr)) {
    2678                 :            :                         /*
    2679                 :            :                          * The default action is to stop all threads in
    2680                 :            :                          * the thread group.  The job control signals
    2681                 :            :                          * do nothing in an orphaned pgrp, but SIGSTOP
    2682                 :            :                          * always works.  Note that siglock needs to be
    2683                 :            :                          * dropped during the call to is_orphaned_pgrp()
    2684                 :            :                          * because of lock ordering with tasklist_lock.
    2685                 :            :                          * This allows an intervening SIGCONT to be posted.
    2686                 :            :                          * We need to check for that and bail out if necessary.
    2687                 :            :                          */
    2688         [ #  # ]:          0 :                         if (signr != SIGSTOP) {
    2689                 :          0 :                                 spin_unlock_irq(&sighand->siglock);
    2690                 :            : 
    2691                 :            :                                 /* signals can be posted during this window */
    2692                 :            : 
    2693         [ #  # ]:          0 :                                 if (is_current_pgrp_orphaned())
    2694                 :          0 :                                         goto relock;
    2695                 :            : 
    2696                 :          0 :                                 spin_lock_irq(&sighand->siglock);
    2697                 :            :                         }
    2698                 :            : 
    2699         [ #  # ]:          0 :                         if (likely(do_signal_stop(ksig->info.si_signo))) {
    2700                 :            :                                 /* It released the siglock.  */
    2701                 :          0 :                                 goto relock;
    2702                 :            :                         }
    2703                 :            : 
    2704                 :            :                         /*
    2705                 :            :                          * We didn't actually stop, due to a race
    2706                 :            :                          * with SIGCONT or something like that.
    2707                 :            :                          */
    2708                 :          0 :                         continue;
    2709                 :            :                 }
    2710                 :            : 
    2711                 :          0 :         fatal:
    2712                 :          0 :                 spin_unlock_irq(&sighand->siglock);
    2713         [ #  # ]:          0 :                 if (unlikely(cgroup_task_frozen(current)))
    2714                 :          0 :                         cgroup_leave_frozen(true);
    2715                 :            : 
    2716                 :            :                 /*
    2717                 :            :                  * Anything else is fatal, maybe with a core dump.
    2718                 :            :                  */
    2719         [ #  # ]:          0 :                 current->flags |= PF_SIGNALED;
    2720                 :            : 
    2721   [ #  #  #  # ]:          0 :                 if (sig_kernel_coredump(signr)) {
    2722         [ #  # ]:          0 :                         if (print_fatal_signals)
    2723                 :          0 :                                 print_fatal_signal(ksig->info.si_signo);
    2724                 :          0 :                         proc_coredump_connector(current);
    2725                 :            :                         /*
    2726                 :            :                          * If it was able to dump core, this kills all
    2727                 :            :                          * other threads in the group and synchronizes with
    2728                 :            :                          * their demise.  If we lost the race with another
    2729                 :            :                          * thread getting here, it set group_exit_code
    2730                 :            :                          * first and our do_group_exit call below will use
    2731                 :            :                          * that value and ignore the one we pass it.
    2732                 :            :                          */
    2733                 :          0 :                         do_coredump(&ksig->info);
    2734                 :            :                 }
    2735                 :            : 
    2736                 :            :                 /*
    2737                 :            :                  * Death signals, no core dump.
    2738                 :            :                  */
    2739                 :          0 :                 do_group_exit(ksig->info.si_signo);
    2740                 :            :                 /* NOTREACHED */
    2741                 :            :         }
    2742                 :      35609 :         spin_unlock_irq(&sighand->siglock);
    2743                 :            : 
    2744                 :      35609 :         ksig->sig = signr;
    2745                 :      35609 :         return ksig->sig > 0;
    2746                 :            : }
    2747                 :            : 
    2748                 :            : /**
    2749                 :            :  * signal_delivered - 
    2750                 :            :  * @ksig:               kernel signal struct
    2751                 :            :  * @stepping:           nonzero if debugger single-step or block-step in use
    2752                 :            :  *
    2753                 :            :  * This function should be called when a signal has successfully been
    2754                 :            :  * delivered. It updates the blocked signals accordingly (@ksig->ka.sa.sa_mask
    2755                 :            :  * is always blocked, and the signal itself is blocked unless %SA_NODEFER
    2756                 :            :  * is set in @ksig->ka.sa.sa_flags.  Tracing is notified.
    2757                 :            :  */
    2758                 :       1050 : static void signal_delivered(struct ksignal *ksig, int stepping)
    2759                 :            : {
    2760                 :       1050 :         sigset_t blocked;
    2761                 :            : 
    2762                 :            :         /* A signal was successfully delivered, and the
    2763                 :            :            saved sigmask was stored on the signal frame,
    2764                 :            :            and will be restored by sigreturn.  So we can
    2765                 :            :            simply clear the restore sigmask flag.  */
    2766         [ +  - ]:       1050 :         clear_restore_sigmask();
    2767                 :            : 
    2768         [ +  - ]:       1050 :         sigorsets(&blocked, &current->blocked, &ksig->ka.sa.sa_mask);
    2769         [ +  - ]:       1050 :         if (!(ksig->ka.sa.sa_flags & SA_NODEFER))
    2770                 :       1050 :                 sigaddset(&blocked, ksig->sig);
    2771                 :       1050 :         set_current_blocked(&blocked);
    2772         [ -  + ]:       1050 :         tracehook_signal_handler(stepping);
    2773                 :       1050 : }
    2774                 :            : 
    2775                 :       1050 : void signal_setup_done(int failed, struct ksignal *ksig, int stepping)
    2776                 :            : {
    2777         [ -  + ]:       1050 :         if (failed)
    2778                 :          0 :                 force_sigsegv(ksig->sig);
    2779                 :            :         else
    2780                 :       1050 :                 signal_delivered(ksig, stepping);
    2781                 :       1050 : }
    2782                 :            : 
    2783                 :            : /*
    2784                 :            :  * It could be that complete_signal() picked us to notify about the
    2785                 :            :  * group-wide signal. Other threads should be notified now to take
    2786                 :            :  * the shared signals in @which since we will not.
    2787                 :            :  */
    2788                 :          0 : static void retarget_shared_pending(struct task_struct *tsk, sigset_t *which)
    2789                 :            : {
    2790                 :          0 :         sigset_t retarget;
    2791                 :          0 :         struct task_struct *t;
    2792                 :            : 
    2793         [ #  # ]:          0 :         sigandsets(&retarget, &tsk->signal->shared_pending.signal, which);
    2794         [ #  # ]:          0 :         if (sigisemptyset(&retarget))
    2795                 :            :                 return;
    2796                 :            : 
    2797                 :            :         t = tsk;
    2798         [ #  # ]:          0 :         while_each_thread(tsk, t) {
    2799         [ #  # ]:          0 :                 if (t->flags & PF_EXITING)
    2800                 :          0 :                         continue;
    2801                 :            : 
    2802         [ #  # ]:          0 :                 if (!has_pending_signals(&retarget, &t->blocked))
    2803                 :          0 :                         continue;
    2804                 :            :                 /* Remove the signals this thread can handle. */
    2805                 :          0 :                 sigandsets(&retarget, &retarget, &t->blocked);
    2806                 :            : 
    2807         [ #  # ]:          0 :                 if (!signal_pending(t))
    2808                 :          0 :                         signal_wake_up(t, 0);
    2809                 :            : 
    2810         [ #  # ]:          0 :                 if (sigisemptyset(&retarget))
    2811                 :            :                         break;
    2812                 :            :         }
    2813                 :            : }
    2814                 :            : 
    2815                 :       9534 : void exit_signals(struct task_struct *tsk)
    2816                 :            : {
    2817                 :       9534 :         int group_stop = 0;
    2818                 :       9534 :         sigset_t unblocked;
    2819                 :            : 
    2820                 :            :         /*
    2821                 :            :          * @tsk is about to have PF_EXITING set - lock out users which
    2822                 :            :          * expect stable threadgroup.
    2823                 :            :          */
    2824                 :       9534 :         cgroup_threadgroup_change_begin(tsk);
    2825                 :            : 
    2826   [ -  +  -  - ]:       9534 :         if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
    2827                 :       9534 :                 tsk->flags |= PF_EXITING;
    2828                 :       9534 :                 cgroup_threadgroup_change_end(tsk);
    2829                 :       9534 :                 return;
    2830                 :            :         }
    2831                 :            : 
    2832                 :          0 :         spin_lock_irq(&tsk->sighand->siglock);
    2833                 :            :         /*
    2834                 :            :          * From now this task is not visible for group-wide signals,
    2835                 :            :          * see wants_signal(), do_signal_stop().
    2836                 :            :          */
    2837                 :          0 :         tsk->flags |= PF_EXITING;
    2838                 :            : 
    2839                 :          0 :         cgroup_threadgroup_change_end(tsk);
    2840                 :            : 
    2841         [ #  # ]:          0 :         if (!signal_pending(tsk))
    2842                 :          0 :                 goto out;
    2843                 :            : 
    2844                 :          0 :         unblocked = tsk->blocked;
    2845                 :          0 :         signotset(&unblocked);
    2846                 :          0 :         retarget_shared_pending(tsk, &unblocked);
    2847                 :            : 
    2848   [ #  #  #  # ]:          0 :         if (unlikely(tsk->jobctl & JOBCTL_STOP_PENDING) &&
    2849                 :          0 :             task_participate_group_stop(tsk))
    2850                 :          0 :                 group_stop = CLD_STOPPED;
    2851                 :          0 : out:
    2852                 :          0 :         spin_unlock_irq(&tsk->sighand->siglock);
    2853                 :            : 
    2854                 :            :         /*
    2855                 :            :          * If group stop has completed, deliver the notification.  This
    2856                 :            :          * should always go to the real parent of the group leader.
    2857                 :            :          */
    2858         [ #  # ]:          0 :         if (unlikely(group_stop)) {
    2859                 :          0 :                 read_lock(&tasklist_lock);
    2860                 :          0 :                 do_notify_parent_cldstop(tsk, false, group_stop);
    2861                 :          0 :                 read_unlock(&tasklist_lock);
    2862                 :            :         }
    2863                 :            : }
    2864                 :            : 
    2865                 :            : /*
    2866                 :            :  * System call entry points.
    2867                 :            :  */
    2868                 :            : 
    2869                 :            : /**
    2870                 :            :  *  sys_restart_syscall - restart a system call
    2871                 :            :  */
    2872                 :          0 : SYSCALL_DEFINE0(restart_syscall)
    2873                 :            : {
    2874                 :          0 :         struct restart_block *restart = &current->restart_block;
    2875                 :          0 :         return restart->fn(restart);
    2876                 :            : }
    2877                 :            : 
    2878                 :          0 : long do_no_restart_syscall(struct restart_block *param)
    2879                 :            : {
    2880                 :          0 :         return -EINTR;
    2881                 :            : }
    2882                 :            : 
    2883                 :       8778 : static void __set_task_blocked(struct task_struct *tsk, const sigset_t *newset)
    2884                 :            : {
    2885   [ -  +  -  - ]:       8778 :         if (signal_pending(tsk) && !thread_group_empty(tsk)) {
    2886                 :          0 :                 sigset_t newblocked;
    2887                 :            :                 /* A set of now blocked but previously unblocked signals. */
    2888                 :          0 :                 sigandnsets(&newblocked, newset, &current->blocked);
    2889                 :          0 :                 retarget_shared_pending(tsk, &newblocked);
    2890                 :            :         }
    2891                 :       8778 :         tsk->blocked = *newset;
    2892                 :       8778 :         recalc_sigpending();
    2893                 :       8778 : }
    2894                 :            : 
    2895                 :            : /**
    2896                 :            :  * set_current_blocked - change current->blocked mask
    2897                 :            :  * @newset: new mask
    2898                 :            :  *
    2899                 :            :  * It is wrong to change ->blocked directly, this helper should be used
    2900                 :            :  * to ensure the process can't miss a shared signal we are going to block.
    2901                 :            :  */
    2902                 :       2100 : void set_current_blocked(sigset_t *newset)
    2903                 :            : {
    2904                 :       2100 :         sigdelsetmask(newset, sigmask(SIGKILL) | sigmask(SIGSTOP));
    2905                 :       2100 :         __set_current_blocked(newset);
    2906                 :          0 : }
    2907                 :            : 
    2908                 :      16170 : void __set_current_blocked(const sigset_t *newset)
    2909                 :            : {
    2910         [ +  + ]:      16170 :         struct task_struct *tsk = current;
    2911                 :            : 
    2912                 :            :         /*
    2913                 :            :          * In case the signal mask hasn't changed, there is nothing we need
    2914                 :            :          * to do. The current->blocked shouldn't be modified by other task.
    2915                 :            :          */
    2916         [ +  + ]:      16170 :         if (sigequalsets(&tsk->blocked, newset))
    2917                 :            :                 return;
    2918                 :            : 
    2919                 :       8778 :         spin_lock_irq(&tsk->sighand->siglock);
    2920                 :       8778 :         __set_task_blocked(tsk, newset);
    2921                 :       8778 :         spin_unlock_irq(&tsk->sighand->siglock);
    2922                 :            : }
    2923                 :            : 
    2924                 :            : /*
    2925                 :            :  * This is also useful for kernel threads that want to temporarily
    2926                 :            :  * (or permanently) block certain signals.
    2927                 :            :  *
    2928                 :            :  * NOTE! Unlike the user-mode sys_sigprocmask(), the kernel
    2929                 :            :  * interface happily blocks "unblockable" signals like SIGKILL
    2930                 :            :  * and friends.
    2931                 :            :  */
    2932                 :      14070 : int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
    2933                 :            : {
    2934         [ -  + ]:      14070 :         struct task_struct *tsk = current;
    2935                 :      14070 :         sigset_t newset;
    2936                 :            : 
    2937                 :            :         /* Lockless, only current can change ->blocked, never from irq */
    2938         [ -  + ]:      14070 :         if (oldset)
    2939                 :          0 :                 *oldset = tsk->blocked;
    2940                 :            : 
    2941   [ +  +  +  - ]:      14070 :         switch (how) {
    2942                 :       2079 :         case SIG_BLOCK:
    2943                 :       2079 :                 sigorsets(&newset, &tsk->blocked, set);
    2944                 :            :                 break;
    2945                 :       6993 :         case SIG_UNBLOCK:
    2946                 :       6993 :                 sigandnsets(&newset, &tsk->blocked, set);
    2947                 :            :                 break;
    2948                 :       4998 :         case SIG_SETMASK:
    2949                 :       4998 :                 newset = *set;
    2950                 :       4998 :                 break;
    2951                 :            :         default:
    2952                 :            :                 return -EINVAL;
    2953                 :            :         }
    2954                 :            : 
    2955                 :      14070 :         __set_current_blocked(&newset);
    2956                 :      14070 :         return 0;
    2957                 :            : }
    2958                 :            : EXPORT_SYMBOL(sigprocmask);
    2959                 :            : 
    2960                 :            : /*
    2961                 :            :  * The api helps set app-provided sigmasks.
    2962                 :            :  *
    2963                 :            :  * This is useful for syscalls such as ppoll, pselect, io_pgetevents and
    2964                 :            :  * epoll_pwait where a new sigmask is passed from userland for the syscalls.
    2965                 :            :  *
    2966                 :            :  * Note that it does set_restore_sigmask() in advance, so it must be always
    2967                 :            :  * paired with restore_saved_sigmask_unless() before return from syscall.
    2968                 :            :  */
    2969                 :        713 : int set_user_sigmask(const sigset_t __user *umask, size_t sigsetsize)
    2970                 :            : {
    2971                 :        713 :         sigset_t kmask;
    2972                 :            : 
    2973         [ -  + ]:        713 :         if (!umask)
    2974                 :            :                 return 0;
    2975         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    2976                 :            :                 return -EINVAL;
    2977         [ #  # ]:          0 :         if (copy_from_user(&kmask, umask, sizeof(sigset_t)))
    2978                 :            :                 return -EFAULT;
    2979                 :            : 
    2980                 :          0 :         set_restore_sigmask();
    2981                 :          0 :         current->saved_sigmask = current->blocked;
    2982                 :          0 :         set_current_blocked(&kmask);
    2983                 :            : 
    2984                 :          0 :         return 0;
    2985                 :            : }
    2986                 :            : 
    2987                 :            : #ifdef CONFIG_COMPAT
    2988                 :          0 : int set_compat_user_sigmask(const compat_sigset_t __user *umask,
    2989                 :            :                             size_t sigsetsize)
    2990                 :            : {
    2991                 :          0 :         sigset_t kmask;
    2992                 :            : 
    2993         [ #  # ]:          0 :         if (!umask)
    2994                 :            :                 return 0;
    2995         [ #  # ]:          0 :         if (sigsetsize != sizeof(compat_sigset_t))
    2996                 :            :                 return -EINVAL;
    2997         [ #  # ]:          0 :         if (get_compat_sigset(&kmask, umask))
    2998                 :            :                 return -EFAULT;
    2999                 :            : 
    3000                 :          0 :         set_restore_sigmask();
    3001                 :          0 :         current->saved_sigmask = current->blocked;
    3002                 :          0 :         set_current_blocked(&kmask);
    3003                 :            : 
    3004                 :          0 :         return 0;
    3005                 :            : }
    3006                 :            : #endif
    3007                 :            : 
    3008                 :            : /**
    3009                 :            :  *  sys_rt_sigprocmask - change the list of currently blocked signals
    3010                 :            :  *  @how: whether to add, remove, or set signals
    3011                 :            :  *  @nset: stores pending signals
    3012                 :            :  *  @oset: previous value of signal mask if non-null
    3013                 :            :  *  @sigsetsize: size of sigset_t type
    3014                 :            :  */
    3015                 :      29736 : SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, nset,
    3016                 :            :                 sigset_t __user *, oset, size_t, sigsetsize)
    3017                 :            : {
    3018                 :      14868 :         sigset_t old_set, new_set;
    3019                 :      14868 :         int error;
    3020                 :            : 
    3021                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    3022         [ +  - ]:      14868 :         if (sigsetsize != sizeof(sigset_t))
    3023                 :            :                 return -EINVAL;
    3024                 :            : 
    3025         [ +  + ]:      14868 :         old_set = current->blocked;
    3026                 :            : 
    3027         [ +  + ]:      14868 :         if (nset) {
    3028         [ +  - ]:      14070 :                 if (copy_from_user(&new_set, nset, sizeof(sigset_t)))
    3029                 :            :                         return -EFAULT;
    3030                 :      14070 :                 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
    3031                 :            : 
    3032                 :      14070 :                 error = sigprocmask(how, &new_set, NULL);
    3033         [ -  + ]:      14070 :                 if (error)
    3034                 :          0 :                         return error;
    3035                 :            :         }
    3036                 :            : 
    3037         [ +  + ]:      14868 :         if (oset) {
    3038         [ -  + ]:       3234 :                 if (copy_to_user(oset, &old_set, sizeof(sigset_t)))
    3039                 :          0 :                         return -EFAULT;
    3040                 :            :         }
    3041                 :            : 
    3042                 :            :         return 0;
    3043                 :            : }
    3044                 :            : 
    3045                 :            : #ifdef CONFIG_COMPAT
    3046                 :          0 : COMPAT_SYSCALL_DEFINE4(rt_sigprocmask, int, how, compat_sigset_t __user *, nset,
    3047                 :            :                 compat_sigset_t __user *, oset, compat_size_t, sigsetsize)
    3048                 :            : {
    3049         [ #  # ]:          0 :         sigset_t old_set = current->blocked;
    3050                 :            : 
    3051                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    3052         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    3053                 :            :                 return -EINVAL;
    3054                 :            : 
    3055         [ #  # ]:          0 :         if (nset) {
    3056                 :          0 :                 sigset_t new_set;
    3057                 :          0 :                 int error;
    3058         [ #  # ]:          0 :                 if (get_compat_sigset(&new_set, nset))
    3059                 :          0 :                         return -EFAULT;
    3060                 :          0 :                 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
    3061                 :            : 
    3062                 :          0 :                 error = sigprocmask(how, &new_set, NULL);
    3063         [ #  # ]:          0 :                 if (error)
    3064                 :          0 :                         return error;
    3065                 :            :         }
    3066         [ #  # ]:          0 :         return oset ? put_compat_sigset(oset, &old_set, sizeof(*oset)) : 0;
    3067                 :            : }
    3068                 :            : #endif
    3069                 :            : 
    3070                 :          0 : static void do_sigpending(sigset_t *set)
    3071                 :            : {
    3072                 :          0 :         spin_lock_irq(&current->sighand->siglock);
    3073                 :          0 :         sigorsets(set, &current->pending.signal,
    3074                 :          0 :                   &current->signal->shared_pending.signal);
    3075                 :          0 :         spin_unlock_irq(&current->sighand->siglock);
    3076                 :            : 
    3077                 :            :         /* Outside the lock because only this thread touches it.  */
    3078                 :          0 :         sigandsets(set, &current->blocked, set);
    3079                 :          0 : }
    3080                 :            : 
    3081                 :            : /**
    3082                 :            :  *  sys_rt_sigpending - examine a pending signal that has been raised
    3083                 :            :  *                      while blocked
    3084                 :            :  *  @uset: stores pending signals
    3085                 :            :  *  @sigsetsize: size of sigset_t type or larger
    3086                 :            :  */
    3087                 :          0 : SYSCALL_DEFINE2(rt_sigpending, sigset_t __user *, uset, size_t, sigsetsize)
    3088                 :            : {
    3089                 :          0 :         sigset_t set;
    3090                 :            : 
    3091         [ #  # ]:          0 :         if (sigsetsize > sizeof(*uset))
    3092                 :            :                 return -EINVAL;
    3093                 :            : 
    3094                 :          0 :         do_sigpending(&set);
    3095                 :            : 
    3096   [ #  #  #  # ]:          0 :         if (copy_to_user(uset, &set, sigsetsize))
    3097                 :          0 :                 return -EFAULT;
    3098                 :            : 
    3099                 :            :         return 0;
    3100                 :            : }
    3101                 :            : 
    3102                 :            : #ifdef CONFIG_COMPAT
    3103                 :          0 : COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset,
    3104                 :            :                 compat_size_t, sigsetsize)
    3105                 :            : {
    3106                 :          0 :         sigset_t set;
    3107                 :            : 
    3108         [ #  # ]:          0 :         if (sigsetsize > sizeof(*uset))
    3109                 :            :                 return -EINVAL;
    3110                 :            : 
    3111                 :          0 :         do_sigpending(&set);
    3112                 :            : 
    3113                 :          0 :         return put_compat_sigset(uset, &set, sigsetsize);
    3114                 :            : }
    3115                 :            : #endif
    3116                 :            : 
    3117                 :            : static const struct {
    3118                 :            :         unsigned char limit, layout;
    3119                 :            : } sig_sicodes[] = {
    3120                 :            :         [SIGILL]  = { NSIGILL,  SIL_FAULT },
    3121                 :            :         [SIGFPE]  = { NSIGFPE,  SIL_FAULT },
    3122                 :            :         [SIGSEGV] = { NSIGSEGV, SIL_FAULT },
    3123                 :            :         [SIGBUS]  = { NSIGBUS,  SIL_FAULT },
    3124                 :            :         [SIGTRAP] = { NSIGTRAP, SIL_FAULT },
    3125                 :            : #if defined(SIGEMT)
    3126                 :            :         [SIGEMT]  = { NSIGEMT,  SIL_FAULT },
    3127                 :            : #endif
    3128                 :            :         [SIGCHLD] = { NSIGCHLD, SIL_CHLD },
    3129                 :            :         [SIGPOLL] = { NSIGPOLL, SIL_POLL },
    3130                 :            :         [SIGSYS]  = { NSIGSYS,  SIL_SYS },
    3131                 :            : };
    3132                 :            : 
    3133                 :          0 : static bool known_siginfo_layout(unsigned sig, int si_code)
    3134                 :            : {
    3135         [ #  # ]:          0 :         if (si_code == SI_KERNEL)
    3136                 :            :                 return true;
    3137         [ #  # ]:          0 :         else if ((si_code > SI_USER)) {
    3138   [ #  #  #  # ]:          0 :                 if (sig_specific_sicodes(sig)) {
    3139         [ #  # ]:          0 :                         if (si_code <= sig_sicodes[sig].limit)
    3140                 :          0 :                                 return true;
    3141                 :            :                 }
    3142         [ #  # ]:          0 :                 else if (si_code <= NSIGPOLL)
    3143                 :          0 :                         return true;
    3144                 :            :         }
    3145         [ #  # ]:          0 :         else if (si_code >= SI_DETHREAD)
    3146                 :            :                 return true;
    3147         [ #  # ]:          0 :         else if (si_code == SI_ASYNCNL)
    3148                 :          0 :                 return true;
    3149                 :            :         return false;
    3150                 :            : }
    3151                 :            : 
    3152                 :       9655 : enum siginfo_layout siginfo_layout(unsigned sig, int si_code)
    3153                 :            : {
    3154                 :       9655 :         enum siginfo_layout layout = SIL_KILL;
    3155         [ +  + ]:       9655 :         if ((si_code > SI_USER) && (si_code < SI_KERNEL)) {
    3156         [ +  - ]:       9592 :                 if ((sig < ARRAY_SIZE(sig_sicodes)) &&
    3157         [ +  - ]:       9592 :                     (si_code <= sig_sicodes[sig].limit)) {
    3158                 :       9592 :                         layout = sig_sicodes[sig].layout;
    3159                 :            :                         /* Handle the exceptions */
    3160                 :       9592 :                         if ((sig == SIGBUS) &&
    3161   [ -  +  -  - ]:       9592 :                             (si_code >= BUS_MCEERR_AR) && (si_code <= BUS_MCEERR_AO))
    3162                 :            :                                 layout = SIL_FAULT_MCEERR;
    3163         [ +  - ]:       9592 :                         else if ((sig == SIGSEGV) && (si_code == SEGV_BNDERR))
    3164                 :            :                                 layout = SIL_FAULT_BNDERR;
    3165                 :            : #ifdef SEGV_PKUERR
    3166         [ -  + ]:       9592 :                         else if ((sig == SIGSEGV) && (si_code == SEGV_PKUERR))
    3167                 :          0 :                                 layout = SIL_FAULT_PKUERR;
    3168                 :            : #endif
    3169                 :            :                 }
    3170         [ #  # ]:          0 :                 else if (si_code <= NSIGPOLL)
    3171                 :          0 :                         layout = SIL_POLL;
    3172                 :            :         } else {
    3173         [ +  - ]:         63 :                 if (si_code == SI_TIMER)
    3174                 :            :                         layout = SIL_TIMER;
    3175         [ +  - ]:         63 :                 else if (si_code == SI_SIGIO)
    3176                 :            :                         layout = SIL_POLL;
    3177         [ -  + ]:         63 :                 else if (si_code < 0)
    3178                 :          0 :                         layout = SIL_RT;
    3179                 :            :         }
    3180                 :       9655 :         return layout;
    3181                 :            : }
    3182                 :            : 
    3183                 :          0 : static inline char __user *si_expansion(const siginfo_t __user *info)
    3184                 :            : {
    3185                 :          0 :         return ((char __user *)info) + sizeof(struct kernel_siginfo);
    3186                 :            : }
    3187                 :            : 
    3188                 :          0 : int copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from)
    3189                 :            : {
    3190                 :          0 :         char __user *expansion = si_expansion(to);
    3191   [ #  #  #  # ]:          0 :         if (copy_to_user(to, from , sizeof(struct kernel_siginfo)))
    3192                 :          0 :                 return -EFAULT;
    3193         [ #  # ]:          0 :         if (clear_user(expansion, SI_EXPANSION_SIZE))
    3194                 :          0 :                 return -EFAULT;
    3195                 :            :         return 0;
    3196                 :            : }
    3197                 :            : 
    3198                 :            : static int post_copy_siginfo_from_user(kernel_siginfo_t *info,
    3199                 :            :                                        const siginfo_t __user *from)
    3200                 :            : {
    3201                 :            :         if (unlikely(!known_siginfo_layout(info->si_signo, info->si_code))) {
    3202                 :            :                 char __user *expansion = si_expansion(from);
    3203                 :            :                 char buf[SI_EXPANSION_SIZE];
    3204                 :            :                 int i;
    3205                 :            :                 /*
    3206                 :            :                  * An unknown si_code might need more than
    3207                 :            :                  * sizeof(struct kernel_siginfo) bytes.  Verify all of the
    3208                 :            :                  * extra bytes are 0.  This guarantees copy_siginfo_to_user
    3209                 :            :                  * will return this data to userspace exactly.
    3210                 :            :                  */
    3211                 :            :                 if (copy_from_user(&buf, expansion, SI_EXPANSION_SIZE))
    3212                 :            :                         return -EFAULT;
    3213                 :            :                 for (i = 0; i < SI_EXPANSION_SIZE; i++) {
    3214                 :            :                         if (buf[i] != 0)
    3215                 :            :                                 return -E2BIG;
    3216                 :            :                 }
    3217                 :            :         }
    3218                 :            :         return 0;
    3219                 :            : }
    3220                 :            : 
    3221                 :          0 : static int __copy_siginfo_from_user(int signo, kernel_siginfo_t *to,
    3222                 :            :                                     const siginfo_t __user *from)
    3223                 :            : {
    3224   [ #  #  #  # ]:          0 :         if (copy_from_user(to, from, sizeof(struct kernel_siginfo)))
    3225                 :          0 :                 return -EFAULT;
    3226                 :          0 :         to->si_signo = signo;
    3227                 :          0 :         return post_copy_siginfo_from_user(to, from);
    3228                 :            : }
    3229                 :            : 
    3230                 :          0 : int copy_siginfo_from_user(kernel_siginfo_t *to, const siginfo_t __user *from)
    3231                 :            : {
    3232   [ #  #  #  # ]:          0 :         if (copy_from_user(to, from, sizeof(struct kernel_siginfo)))
    3233                 :          0 :                 return -EFAULT;
    3234                 :          0 :         return post_copy_siginfo_from_user(to, from);
    3235                 :            : }
    3236                 :            : 
    3237                 :            : #ifdef CONFIG_COMPAT
    3238                 :          0 : int copy_siginfo_to_user32(struct compat_siginfo __user *to,
    3239                 :            :                            const struct kernel_siginfo *from)
    3240                 :            : #if defined(CONFIG_X86_X32_ABI) || defined(CONFIG_IA32_EMULATION)
    3241                 :            : {
    3242                 :          0 :         return __copy_siginfo_to_user32(to, from, in_x32_syscall());
    3243                 :            : }
    3244                 :          0 : int __copy_siginfo_to_user32(struct compat_siginfo __user *to,
    3245                 :            :                              const struct kernel_siginfo *from, bool x32_ABI)
    3246                 :            : #endif
    3247                 :            : {
    3248                 :          0 :         struct compat_siginfo new;
    3249                 :          0 :         memset(&new, 0, sizeof(new));
    3250                 :            : 
    3251                 :          0 :         new.si_signo = from->si_signo;
    3252                 :          0 :         new.si_errno = from->si_errno;
    3253                 :          0 :         new.si_code  = from->si_code;
    3254   [ #  #  #  #  :          0 :         switch(siginfo_layout(from->si_signo, from->si_code)) {
          #  #  #  #  #  
                   #  # ]
    3255                 :          0 :         case SIL_KILL:
    3256                 :          0 :                 new.si_pid = from->si_pid;
    3257                 :          0 :                 new.si_uid = from->si_uid;
    3258                 :          0 :                 break;
    3259                 :          0 :         case SIL_TIMER:
    3260                 :          0 :                 new.si_tid     = from->si_tid;
    3261                 :          0 :                 new.si_overrun = from->si_overrun;
    3262                 :          0 :                 new.si_int     = from->si_int;
    3263                 :          0 :                 break;
    3264                 :          0 :         case SIL_POLL:
    3265                 :          0 :                 new.si_band = from->si_band;
    3266                 :          0 :                 new.si_fd   = from->si_fd;
    3267                 :          0 :                 break;
    3268                 :          0 :         case SIL_FAULT:
    3269                 :          0 :                 new.si_addr = ptr_to_compat(from->si_addr);
    3270                 :            : #ifdef __ARCH_SI_TRAPNO
    3271                 :            :                 new.si_trapno = from->si_trapno;
    3272                 :            : #endif
    3273                 :          0 :                 break;
    3274                 :          0 :         case SIL_FAULT_MCEERR:
    3275                 :          0 :                 new.si_addr = ptr_to_compat(from->si_addr);
    3276                 :            : #ifdef __ARCH_SI_TRAPNO
    3277                 :            :                 new.si_trapno = from->si_trapno;
    3278                 :            : #endif
    3279                 :          0 :                 new.si_addr_lsb = from->si_addr_lsb;
    3280                 :          0 :                 break;
    3281                 :          0 :         case SIL_FAULT_BNDERR:
    3282                 :          0 :                 new.si_addr = ptr_to_compat(from->si_addr);
    3283                 :            : #ifdef __ARCH_SI_TRAPNO
    3284                 :            :                 new.si_trapno = from->si_trapno;
    3285                 :            : #endif
    3286                 :          0 :                 new.si_lower = ptr_to_compat(from->si_lower);
    3287                 :          0 :                 new.si_upper = ptr_to_compat(from->si_upper);
    3288                 :          0 :                 break;
    3289                 :          0 :         case SIL_FAULT_PKUERR:
    3290                 :          0 :                 new.si_addr = ptr_to_compat(from->si_addr);
    3291                 :            : #ifdef __ARCH_SI_TRAPNO
    3292                 :            :                 new.si_trapno = from->si_trapno;
    3293                 :            : #endif
    3294                 :          0 :                 new.si_pkey = from->si_pkey;
    3295                 :          0 :                 break;
    3296                 :          0 :         case SIL_CHLD:
    3297                 :          0 :                 new.si_pid    = from->si_pid;
    3298                 :          0 :                 new.si_uid    = from->si_uid;
    3299                 :          0 :                 new.si_status = from->si_status;
    3300                 :            : #ifdef CONFIG_X86_X32_ABI
    3301                 :            :                 if (x32_ABI) {
    3302                 :            :                         new._sifields._sigchld_x32._utime = from->si_utime;
    3303                 :            :                         new._sifields._sigchld_x32._stime = from->si_stime;
    3304                 :            :                 } else
    3305                 :            : #endif
    3306                 :            :                 {
    3307                 :          0 :                         new.si_utime = from->si_utime;
    3308                 :          0 :                         new.si_stime = from->si_stime;
    3309                 :            :                 }
    3310                 :          0 :                 break;
    3311                 :          0 :         case SIL_RT:
    3312                 :          0 :                 new.si_pid = from->si_pid;
    3313                 :          0 :                 new.si_uid = from->si_uid;
    3314                 :          0 :                 new.si_int = from->si_int;
    3315                 :          0 :                 break;
    3316                 :          0 :         case SIL_SYS:
    3317                 :          0 :                 new.si_call_addr = ptr_to_compat(from->si_call_addr);
    3318                 :          0 :                 new.si_syscall   = from->si_syscall;
    3319                 :          0 :                 new.si_arch      = from->si_arch;
    3320                 :          0 :                 break;
    3321                 :            :         }
    3322                 :            : 
    3323         [ #  # ]:          0 :         if (copy_to_user(to, &new, sizeof(struct compat_siginfo)))
    3324                 :          0 :                 return -EFAULT;
    3325                 :            : 
    3326                 :            :         return 0;
    3327                 :            : }
    3328                 :            : 
    3329                 :          0 : static int post_copy_siginfo_from_user32(kernel_siginfo_t *to,
    3330                 :            :                                          const struct compat_siginfo *from)
    3331                 :            : {
    3332   [ #  #  #  #  :          0 :         clear_siginfo(to);
          #  #  #  #  #  
                   #  # ]
    3333                 :          0 :         to->si_signo = from->si_signo;
    3334                 :          0 :         to->si_errno = from->si_errno;
    3335                 :          0 :         to->si_code  = from->si_code;
    3336   [ #  #  #  #  :          0 :         switch(siginfo_layout(from->si_signo, from->si_code)) {
          #  #  #  #  #  
                   #  # ]
    3337                 :          0 :         case SIL_KILL:
    3338                 :          0 :                 to->si_pid = from->si_pid;
    3339                 :          0 :                 to->si_uid = from->si_uid;
    3340                 :          0 :                 break;
    3341                 :          0 :         case SIL_TIMER:
    3342                 :          0 :                 to->si_tid     = from->si_tid;
    3343                 :          0 :                 to->si_overrun = from->si_overrun;
    3344                 :          0 :                 to->si_int     = from->si_int;
    3345                 :          0 :                 break;
    3346                 :          0 :         case SIL_POLL:
    3347                 :          0 :                 to->si_band = from->si_band;
    3348                 :          0 :                 to->si_fd   = from->si_fd;
    3349                 :          0 :                 break;
    3350                 :          0 :         case SIL_FAULT:
    3351                 :          0 :                 to->si_addr = compat_ptr(from->si_addr);
    3352                 :            : #ifdef __ARCH_SI_TRAPNO
    3353                 :            :                 to->si_trapno = from->si_trapno;
    3354                 :            : #endif
    3355                 :          0 :                 break;
    3356                 :          0 :         case SIL_FAULT_MCEERR:
    3357                 :          0 :                 to->si_addr = compat_ptr(from->si_addr);
    3358                 :            : #ifdef __ARCH_SI_TRAPNO
    3359                 :            :                 to->si_trapno = from->si_trapno;
    3360                 :            : #endif
    3361                 :          0 :                 to->si_addr_lsb = from->si_addr_lsb;
    3362                 :          0 :                 break;
    3363                 :          0 :         case SIL_FAULT_BNDERR:
    3364                 :          0 :                 to->si_addr = compat_ptr(from->si_addr);
    3365                 :            : #ifdef __ARCH_SI_TRAPNO
    3366                 :            :                 to->si_trapno = from->si_trapno;
    3367                 :            : #endif
    3368                 :          0 :                 to->si_lower = compat_ptr(from->si_lower);
    3369                 :          0 :                 to->si_upper = compat_ptr(from->si_upper);
    3370                 :          0 :                 break;
    3371                 :          0 :         case SIL_FAULT_PKUERR:
    3372                 :          0 :                 to->si_addr = compat_ptr(from->si_addr);
    3373                 :            : #ifdef __ARCH_SI_TRAPNO
    3374                 :            :                 to->si_trapno = from->si_trapno;
    3375                 :            : #endif
    3376                 :          0 :                 to->si_pkey = from->si_pkey;
    3377                 :          0 :                 break;
    3378                 :          0 :         case SIL_CHLD:
    3379                 :          0 :                 to->si_pid    = from->si_pid;
    3380                 :          0 :                 to->si_uid    = from->si_uid;
    3381                 :          0 :                 to->si_status = from->si_status;
    3382                 :            : #ifdef CONFIG_X86_X32_ABI
    3383                 :            :                 if (in_x32_syscall()) {
    3384                 :            :                         to->si_utime = from->_sifields._sigchld_x32._utime;
    3385                 :            :                         to->si_stime = from->_sifields._sigchld_x32._stime;
    3386                 :            :                 } else
    3387                 :            : #endif
    3388                 :            :                 {
    3389                 :          0 :                         to->si_utime = from->si_utime;
    3390                 :          0 :                         to->si_stime = from->si_stime;
    3391                 :            :                 }
    3392                 :          0 :                 break;
    3393                 :          0 :         case SIL_RT:
    3394                 :          0 :                 to->si_pid = from->si_pid;
    3395                 :          0 :                 to->si_uid = from->si_uid;
    3396                 :          0 :                 to->si_int = from->si_int;
    3397                 :          0 :                 break;
    3398                 :          0 :         case SIL_SYS:
    3399                 :          0 :                 to->si_call_addr = compat_ptr(from->si_call_addr);
    3400                 :          0 :                 to->si_syscall   = from->si_syscall;
    3401                 :          0 :                 to->si_arch      = from->si_arch;
    3402                 :          0 :                 break;
    3403                 :            :         }
    3404                 :          0 :         return 0;
    3405                 :            : }
    3406                 :            : 
    3407                 :          0 : static int __copy_siginfo_from_user32(int signo, struct kernel_siginfo *to,
    3408                 :            :                                       const struct compat_siginfo __user *ufrom)
    3409                 :            : {
    3410                 :          0 :         struct compat_siginfo from;
    3411                 :            : 
    3412         [ #  # ]:          0 :         if (copy_from_user(&from, ufrom, sizeof(struct compat_siginfo)))
    3413                 :            :                 return -EFAULT;
    3414                 :            : 
    3415                 :          0 :         from.si_signo = signo;
    3416                 :          0 :         return post_copy_siginfo_from_user32(to, &from);
    3417                 :            : }
    3418                 :            : 
    3419                 :          0 : int copy_siginfo_from_user32(struct kernel_siginfo *to,
    3420                 :            :                              const struct compat_siginfo __user *ufrom)
    3421                 :            : {
    3422                 :          0 :         struct compat_siginfo from;
    3423                 :            : 
    3424         [ #  # ]:          0 :         if (copy_from_user(&from, ufrom, sizeof(struct compat_siginfo)))
    3425                 :            :                 return -EFAULT;
    3426                 :            : 
    3427                 :          0 :         return post_copy_siginfo_from_user32(to, &from);
    3428                 :            : }
    3429                 :            : #endif /* CONFIG_COMPAT */
    3430                 :            : 
    3431                 :            : /**
    3432                 :            :  *  do_sigtimedwait - wait for queued signals specified in @which
    3433                 :            :  *  @which: queued signals to wait for
    3434                 :            :  *  @info: if non-null, the signal's siginfo is returned here
    3435                 :            :  *  @ts: upper bound on process time suspension
    3436                 :            :  */
    3437                 :            : static int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info,
    3438                 :            :                     const struct timespec64 *ts)
    3439                 :            : {
    3440                 :            :         ktime_t *to = NULL, timeout = KTIME_MAX;
    3441                 :            :         struct task_struct *tsk = current;
    3442                 :            :         sigset_t mask = *which;
    3443                 :            :         int sig, ret = 0;
    3444                 :            : 
    3445                 :            :         if (ts) {
    3446                 :            :                 if (!timespec64_valid(ts))
    3447                 :            :                         return -EINVAL;
    3448                 :            :                 timeout = timespec64_to_ktime(*ts);
    3449                 :            :                 to = &timeout;
    3450                 :            :         }
    3451                 :            : 
    3452                 :            :         /*
    3453                 :            :          * Invert the set of allowed signals to get those we want to block.
    3454                 :            :          */
    3455                 :            :         sigdelsetmask(&mask, sigmask(SIGKILL) | sigmask(SIGSTOP));
    3456                 :            :         signotset(&mask);
    3457                 :            : 
    3458                 :            :         spin_lock_irq(&tsk->sighand->siglock);
    3459                 :            :         sig = dequeue_signal(tsk, &mask, info);
    3460                 :            :         if (!sig && timeout) {
    3461                 :            :                 /*
    3462                 :            :                  * None ready, temporarily unblock those we're interested
    3463                 :            :                  * while we are sleeping in so that we'll be awakened when
    3464                 :            :                  * they arrive. Unblocking is always fine, we can avoid
    3465                 :            :                  * set_current_blocked().
    3466                 :            :                  */
    3467                 :            :                 tsk->real_blocked = tsk->blocked;
    3468                 :            :                 sigandsets(&tsk->blocked, &tsk->blocked, &mask);
    3469                 :            :                 recalc_sigpending();
    3470                 :            :                 spin_unlock_irq(&tsk->sighand->siglock);
    3471                 :            : 
    3472                 :            :                 __set_current_state(TASK_INTERRUPTIBLE);
    3473                 :            :                 ret = freezable_schedule_hrtimeout_range(to, tsk->timer_slack_ns,
    3474                 :            :                                                          HRTIMER_MODE_REL);
    3475                 :            :                 spin_lock_irq(&tsk->sighand->siglock);
    3476                 :            :                 __set_task_blocked(tsk, &tsk->real_blocked);
    3477                 :            :                 sigemptyset(&tsk->real_blocked);
    3478                 :            :                 sig = dequeue_signal(tsk, &mask, info);
    3479                 :            :         }
    3480                 :            :         spin_unlock_irq(&tsk->sighand->siglock);
    3481                 :            : 
    3482                 :            :         if (sig)
    3483                 :            :                 return sig;
    3484                 :            :         return ret ? -EINTR : -EAGAIN;
    3485                 :            : }
    3486                 :            : 
    3487                 :            : /**
    3488                 :            :  *  sys_rt_sigtimedwait - synchronously wait for queued signals specified
    3489                 :            :  *                      in @uthese
    3490                 :            :  *  @uthese: queued signals to wait for
    3491                 :            :  *  @uinfo: if non-null, the signal's siginfo is returned here
    3492                 :            :  *  @uts: upper bound on process time suspension
    3493                 :            :  *  @sigsetsize: size of sigset_t type
    3494                 :            :  */
    3495                 :          0 : SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
    3496                 :            :                 siginfo_t __user *, uinfo,
    3497                 :            :                 const struct __kernel_timespec __user *, uts,
    3498                 :            :                 size_t, sigsetsize)
    3499                 :            : {
    3500                 :          0 :         sigset_t these;
    3501                 :          0 :         struct timespec64 ts;
    3502                 :          0 :         kernel_siginfo_t info;
    3503                 :          0 :         int ret;
    3504                 :            : 
    3505                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    3506         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    3507                 :            :                 return -EINVAL;
    3508                 :            : 
    3509         [ #  # ]:          0 :         if (copy_from_user(&these, uthese, sizeof(these)))
    3510                 :            :                 return -EFAULT;
    3511                 :            : 
    3512         [ #  # ]:          0 :         if (uts) {
    3513         [ #  # ]:          0 :                 if (get_timespec64(&ts, uts))
    3514                 :            :                         return -EFAULT;
    3515                 :            :         }
    3516                 :            : 
    3517         [ #  # ]:          0 :         ret = do_sigtimedwait(&these, &info, uts ? &ts : NULL);
    3518                 :            : 
    3519         [ #  # ]:          0 :         if (ret > 0 && uinfo) {
    3520         [ #  # ]:          0 :                 if (copy_siginfo_to_user(uinfo, &info))
    3521                 :          0 :                         ret = -EFAULT;
    3522                 :            :         }
    3523                 :            : 
    3524                 :          0 :         return ret;
    3525                 :            : }
    3526                 :            : 
    3527                 :            : #ifdef CONFIG_COMPAT_32BIT_TIME
    3528                 :          0 : SYSCALL_DEFINE4(rt_sigtimedwait_time32, const sigset_t __user *, uthese,
    3529                 :            :                 siginfo_t __user *, uinfo,
    3530                 :            :                 const struct old_timespec32 __user *, uts,
    3531                 :            :                 size_t, sigsetsize)
    3532                 :            : {
    3533                 :          0 :         sigset_t these;
    3534                 :          0 :         struct timespec64 ts;
    3535                 :          0 :         kernel_siginfo_t info;
    3536                 :          0 :         int ret;
    3537                 :            : 
    3538         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    3539                 :            :                 return -EINVAL;
    3540                 :            : 
    3541         [ #  # ]:          0 :         if (copy_from_user(&these, uthese, sizeof(these)))
    3542                 :            :                 return -EFAULT;
    3543                 :            : 
    3544         [ #  # ]:          0 :         if (uts) {
    3545         [ #  # ]:          0 :                 if (get_old_timespec32(&ts, uts))
    3546                 :            :                         return -EFAULT;
    3547                 :            :         }
    3548                 :            : 
    3549         [ #  # ]:          0 :         ret = do_sigtimedwait(&these, &info, uts ? &ts : NULL);
    3550                 :            : 
    3551         [ #  # ]:          0 :         if (ret > 0 && uinfo) {
    3552         [ #  # ]:          0 :                 if (copy_siginfo_to_user(uinfo, &info))
    3553                 :          0 :                         ret = -EFAULT;
    3554                 :            :         }
    3555                 :            : 
    3556                 :          0 :         return ret;
    3557                 :            : }
    3558                 :            : #endif
    3559                 :            : 
    3560                 :            : #ifdef CONFIG_COMPAT
    3561                 :          0 : COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time64, compat_sigset_t __user *, uthese,
    3562                 :            :                 struct compat_siginfo __user *, uinfo,
    3563                 :            :                 struct __kernel_timespec __user *, uts, compat_size_t, sigsetsize)
    3564                 :            : {
    3565                 :          0 :         sigset_t s;
    3566                 :          0 :         struct timespec64 t;
    3567                 :          0 :         kernel_siginfo_t info;
    3568                 :          0 :         long ret;
    3569                 :            : 
    3570         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    3571                 :            :                 return -EINVAL;
    3572                 :            : 
    3573         [ #  # ]:          0 :         if (get_compat_sigset(&s, uthese))
    3574                 :            :                 return -EFAULT;
    3575                 :            : 
    3576         [ #  # ]:          0 :         if (uts) {
    3577         [ #  # ]:          0 :                 if (get_timespec64(&t, uts))
    3578                 :            :                         return -EFAULT;
    3579                 :            :         }
    3580                 :            : 
    3581         [ #  # ]:          0 :         ret = do_sigtimedwait(&s, &info, uts ? &t : NULL);
    3582                 :            : 
    3583         [ #  # ]:          0 :         if (ret > 0 && uinfo) {
    3584         [ #  # ]:          0 :                 if (copy_siginfo_to_user32(uinfo, &info))
    3585                 :          0 :                         ret = -EFAULT;
    3586                 :            :         }
    3587                 :            : 
    3588                 :            :         return ret;
    3589                 :            : }
    3590                 :            : 
    3591                 :            : #ifdef CONFIG_COMPAT_32BIT_TIME
    3592                 :          0 : COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait_time32, compat_sigset_t __user *, uthese,
    3593                 :            :                 struct compat_siginfo __user *, uinfo,
    3594                 :            :                 struct old_timespec32 __user *, uts, compat_size_t, sigsetsize)
    3595                 :            : {
    3596                 :          0 :         sigset_t s;
    3597                 :          0 :         struct timespec64 t;
    3598                 :          0 :         kernel_siginfo_t info;
    3599                 :          0 :         long ret;
    3600                 :            : 
    3601         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    3602                 :            :                 return -EINVAL;
    3603                 :            : 
    3604         [ #  # ]:          0 :         if (get_compat_sigset(&s, uthese))
    3605                 :            :                 return -EFAULT;
    3606                 :            : 
    3607         [ #  # ]:          0 :         if (uts) {
    3608         [ #  # ]:          0 :                 if (get_old_timespec32(&t, uts))
    3609                 :            :                         return -EFAULT;
    3610                 :            :         }
    3611                 :            : 
    3612         [ #  # ]:          0 :         ret = do_sigtimedwait(&s, &info, uts ? &t : NULL);
    3613                 :            : 
    3614         [ #  # ]:          0 :         if (ret > 0 && uinfo) {
    3615         [ #  # ]:          0 :                 if (copy_siginfo_to_user32(uinfo, &info))
    3616                 :          0 :                         ret = -EFAULT;
    3617                 :            :         }
    3618                 :            : 
    3619                 :            :         return ret;
    3620                 :            : }
    3621                 :            : #endif
    3622                 :            : #endif
    3623                 :            : 
    3624                 :         42 : static inline void prepare_kill_siginfo(int sig, struct kernel_siginfo *info)
    3625                 :            : {
    3626                 :         42 :         clear_siginfo(info);
    3627                 :         42 :         info->si_signo = sig;
    3628                 :         42 :         info->si_errno = 0;
    3629                 :         42 :         info->si_code = SI_USER;
    3630                 :         42 :         info->si_pid = task_tgid_vnr(current);
    3631         [ -  + ]:         42 :         info->si_uid = from_kuid_munged(current_user_ns(), current_uid());
    3632                 :         42 : }
    3633                 :            : 
    3634                 :            : /**
    3635                 :            :  *  sys_kill - send a signal to a process
    3636                 :            :  *  @pid: the PID of the process
    3637                 :            :  *  @sig: signal to be sent
    3638                 :            :  */
    3639                 :         84 : SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
    3640                 :            : {
    3641                 :         42 :         struct kernel_siginfo info;
    3642                 :            : 
    3643                 :         42 :         prepare_kill_siginfo(sig, &info);
    3644                 :            : 
    3645                 :         42 :         return kill_something_info(sig, &info, pid);
    3646                 :            : }
    3647                 :            : 
    3648                 :            : /*
    3649                 :            :  * Verify that the signaler and signalee either are in the same pid namespace
    3650                 :            :  * or that the signaler's pid namespace is an ancestor of the signalee's pid
    3651                 :            :  * namespace.
    3652                 :            :  */
    3653                 :          0 : static bool access_pidfd_pidns(struct pid *pid)
    3654                 :            : {
    3655                 :          0 :         struct pid_namespace *active = task_active_pid_ns(current);
    3656         [ #  # ]:          0 :         struct pid_namespace *p = ns_of_pid(pid);
    3657                 :            : 
    3658                 :          0 :         for (;;) {
    3659         [ #  # ]:          0 :                 if (!p)
    3660                 :            :                         return false;
    3661         [ #  # ]:          0 :                 if (p == active)
    3662                 :            :                         break;
    3663                 :          0 :                 p = p->parent;
    3664                 :            :         }
    3665                 :            : 
    3666                 :            :         return true;
    3667                 :            : }
    3668                 :            : 
    3669                 :          0 : static int copy_siginfo_from_user_any(kernel_siginfo_t *kinfo, siginfo_t *info)
    3670                 :            : {
    3671                 :            : #ifdef CONFIG_COMPAT
    3672                 :            :         /*
    3673                 :            :          * Avoid hooking up compat syscalls and instead handle necessary
    3674                 :            :          * conversions here. Note, this is a stop-gap measure and should not be
    3675                 :            :          * considered a generic solution.
    3676                 :            :          */
    3677   [ #  #  #  # ]:          0 :         if (in_compat_syscall())
    3678                 :          0 :                 return copy_siginfo_from_user32(
    3679                 :            :                         kinfo, (struct compat_siginfo __user *)info);
    3680                 :            : #endif
    3681                 :          0 :         return copy_siginfo_from_user(kinfo, info);
    3682                 :            : }
    3683                 :            : 
    3684                 :          0 : static struct pid *pidfd_to_pid(const struct file *file)
    3685                 :            : {
    3686                 :          0 :         struct pid *pid;
    3687                 :            : 
    3688                 :          0 :         pid = pidfd_pid(file);
    3689         [ #  # ]:          0 :         if (!IS_ERR(pid))
    3690                 :            :                 return pid;
    3691                 :            : 
    3692                 :          0 :         return tgid_pidfd_to_pid(file);
    3693                 :            : }
    3694                 :            : 
    3695                 :            : /**
    3696                 :            :  * sys_pidfd_send_signal - Signal a process through a pidfd
    3697                 :            :  * @pidfd:  file descriptor of the process
    3698                 :            :  * @sig:    signal to send
    3699                 :            :  * @info:   signal info
    3700                 :            :  * @flags:  future flags
    3701                 :            :  *
    3702                 :            :  * The syscall currently only signals via PIDTYPE_PID which covers
    3703                 :            :  * kill(<positive-pid>, <signal>. It does not signal threads or process
    3704                 :            :  * groups.
    3705                 :            :  * In order to extend the syscall to threads and process groups the @flags
    3706                 :            :  * argument should be used. In essence, the @flags argument will determine
    3707                 :            :  * what is signaled and not the file descriptor itself. Put in other words,
    3708                 :            :  * grouping is a property of the flags argument not a property of the file
    3709                 :            :  * descriptor.
    3710                 :            :  *
    3711                 :            :  * Return: 0 on success, negative errno on failure
    3712                 :            :  */
    3713                 :          0 : SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig,
    3714                 :            :                 siginfo_t __user *, info, unsigned int, flags)
    3715                 :            : {
    3716                 :          0 :         int ret;
    3717                 :          0 :         struct fd f;
    3718                 :          0 :         struct pid *pid;
    3719                 :          0 :         kernel_siginfo_t kinfo;
    3720                 :            : 
    3721                 :            :         /* Enforce flags be set to 0 until we add an extension. */
    3722         [ #  # ]:          0 :         if (flags)
    3723                 :            :                 return -EINVAL;
    3724                 :            : 
    3725                 :          0 :         f = fdget(pidfd);
    3726         [ #  # ]:          0 :         if (!f.file)
    3727                 :            :                 return -EBADF;
    3728                 :            : 
    3729                 :            :         /* Is this a pidfd? */
    3730                 :          0 :         pid = pidfd_to_pid(f.file);
    3731         [ #  # ]:          0 :         if (IS_ERR(pid)) {
    3732                 :          0 :                 ret = PTR_ERR(pid);
    3733                 :          0 :                 goto err;
    3734                 :            :         }
    3735                 :            : 
    3736                 :          0 :         ret = -EINVAL;
    3737         [ #  # ]:          0 :         if (!access_pidfd_pidns(pid))
    3738                 :          0 :                 goto err;
    3739                 :            : 
    3740         [ #  # ]:          0 :         if (info) {
    3741                 :          0 :                 ret = copy_siginfo_from_user_any(&kinfo, info);
    3742         [ #  # ]:          0 :                 if (unlikely(ret))
    3743                 :          0 :                         goto err;
    3744                 :            : 
    3745                 :          0 :                 ret = -EINVAL;
    3746         [ #  # ]:          0 :                 if (unlikely(sig != kinfo.si_signo))
    3747                 :          0 :                         goto err;
    3748                 :            : 
    3749                 :            :                 /* Only allow sending arbitrary signals to yourself. */
    3750                 :          0 :                 ret = -EPERM;
    3751         [ #  # ]:          0 :                 if ((task_pid(current) != pid) &&
    3752         [ #  # ]:          0 :                     (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL))
    3753                 :          0 :                         goto err;
    3754                 :            :         } else {
    3755                 :          0 :                 prepare_kill_siginfo(sig, &kinfo);
    3756                 :            :         }
    3757                 :            : 
    3758                 :          0 :         ret = kill_pid_info(sig, &kinfo, pid);
    3759                 :            : 
    3760                 :          0 : err:
    3761         [ #  # ]:          0 :         fdput(f);
    3762                 :          0 :         return ret;
    3763                 :            : }
    3764                 :            : 
    3765                 :            : static int
    3766                 :          0 : do_send_specific(pid_t tgid, pid_t pid, int sig, struct kernel_siginfo *info)
    3767                 :            : {
    3768                 :          0 :         struct task_struct *p;
    3769                 :          0 :         int error = -ESRCH;
    3770                 :            : 
    3771                 :          0 :         rcu_read_lock();
    3772                 :          0 :         p = find_task_by_vpid(pid);
    3773   [ #  #  #  #  :          0 :         if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
                   #  # ]
    3774                 :          0 :                 error = check_kill_permission(sig, info, p);
    3775                 :            :                 /*
    3776                 :            :                  * The null signal is a permissions and process existence
    3777                 :            :                  * probe.  No signal is actually delivered.
    3778                 :            :                  */
    3779         [ #  # ]:          0 :                 if (!error && sig) {
    3780                 :          0 :                         error = do_send_sig_info(sig, info, p, PIDTYPE_PID);
    3781                 :            :                         /*
    3782                 :            :                          * If lock_task_sighand() failed we pretend the task
    3783                 :            :                          * dies after receiving the signal. The window is tiny,
    3784                 :            :                          * and the signal is private anyway.
    3785                 :            :                          */
    3786         [ #  # ]:          0 :                         if (unlikely(error == -ESRCH))
    3787                 :          0 :                                 error = 0;
    3788                 :            :                 }
    3789                 :            :         }
    3790                 :          0 :         rcu_read_unlock();
    3791                 :            : 
    3792                 :          0 :         return error;
    3793                 :            : }
    3794                 :            : 
    3795                 :          0 : static int do_tkill(pid_t tgid, pid_t pid, int sig)
    3796                 :            : {
    3797                 :          0 :         struct kernel_siginfo info;
    3798                 :            : 
    3799                 :          0 :         clear_siginfo(&info);
    3800                 :          0 :         info.si_signo = sig;
    3801                 :          0 :         info.si_errno = 0;
    3802                 :          0 :         info.si_code = SI_TKILL;
    3803                 :          0 :         info.si_pid = task_tgid_vnr(current);
    3804         [ #  # ]:          0 :         info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
    3805                 :            : 
    3806                 :          0 :         return do_send_specific(tgid, pid, sig, &info);
    3807                 :            : }
    3808                 :            : 
    3809                 :            : /**
    3810                 :            :  *  sys_tgkill - send signal to one specific thread
    3811                 :            :  *  @tgid: the thread group ID of the thread
    3812                 :            :  *  @pid: the PID of the thread
    3813                 :            :  *  @sig: signal to be sent
    3814                 :            :  *
    3815                 :            :  *  This syscall also checks the @tgid and returns -ESRCH even if the PID
    3816                 :            :  *  exists but it's not belonging to the target process anymore. This
    3817                 :            :  *  method solves the problem of threads exiting and PIDs getting reused.
    3818                 :            :  */
    3819                 :          0 : SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig)
    3820                 :            : {
    3821                 :            :         /* This is only valid for single tasks */
    3822   [ #  #  #  # ]:          0 :         if (pid <= 0 || tgid <= 0)
    3823                 :            :                 return -EINVAL;
    3824                 :            : 
    3825                 :          0 :         return do_tkill(tgid, pid, sig);
    3826                 :            : }
    3827                 :            : 
    3828                 :            : /**
    3829                 :            :  *  sys_tkill - send signal to one specific task
    3830                 :            :  *  @pid: the PID of the task
    3831                 :            :  *  @sig: signal to be sent
    3832                 :            :  *
    3833                 :            :  *  Send a signal to only one task, even if it's a CLONE_THREAD task.
    3834                 :            :  */
    3835                 :          0 : SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig)
    3836                 :            : {
    3837                 :            :         /* This is only valid for single tasks */
    3838   [ #  #  #  # ]:          0 :         if (pid <= 0)
    3839                 :            :                 return -EINVAL;
    3840                 :            : 
    3841                 :          0 :         return do_tkill(0, pid, sig);
    3842                 :            : }
    3843                 :            : 
    3844                 :          0 : static int do_rt_sigqueueinfo(pid_t pid, int sig, kernel_siginfo_t *info)
    3845                 :            : {
    3846                 :            :         /* Not even root can pretend to send signals from the kernel.
    3847                 :            :          * Nor can they impersonate a kill()/tgkill(), which adds source info.
    3848                 :            :          */
    3849   [ #  #  #  # ]:          0 :         if ((info->si_code >= 0 || info->si_code == SI_TKILL) &&
    3850                 :            :             (task_pid_vnr(current) != pid))
    3851                 :            :                 return -EPERM;
    3852                 :            : 
    3853                 :            :         /* POSIX.1b doesn't mention process groups.  */
    3854                 :          0 :         return kill_proc_info(sig, info, pid);
    3855                 :            : }
    3856                 :            : 
    3857                 :            : /**
    3858                 :            :  *  sys_rt_sigqueueinfo - send signal information to a signal
    3859                 :            :  *  @pid: the PID of the thread
    3860                 :            :  *  @sig: signal to be sent
    3861                 :            :  *  @uinfo: signal info to be sent
    3862                 :            :  */
    3863                 :          0 : SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig,
    3864                 :            :                 siginfo_t __user *, uinfo)
    3865                 :            : {
    3866                 :          0 :         kernel_siginfo_t info;
    3867                 :          0 :         int ret = __copy_siginfo_from_user(sig, &info, uinfo);
    3868         [ #  # ]:          0 :         if (unlikely(ret))
    3869                 :          0 :                 return ret;
    3870                 :          0 :         return do_rt_sigqueueinfo(pid, sig, &info);
    3871                 :            : }
    3872                 :            : 
    3873                 :            : #ifdef CONFIG_COMPAT
    3874                 :          0 : COMPAT_SYSCALL_DEFINE3(rt_sigqueueinfo,
    3875                 :            :                         compat_pid_t, pid,
    3876                 :            :                         int, sig,
    3877                 :            :                         struct compat_siginfo __user *, uinfo)
    3878                 :            : {
    3879                 :          0 :         kernel_siginfo_t info;
    3880                 :          0 :         int ret = __copy_siginfo_from_user32(sig, &info, uinfo);
    3881         [ #  # ]:          0 :         if (unlikely(ret))
    3882                 :          0 :                 return ret;
    3883                 :          0 :         return do_rt_sigqueueinfo(pid, sig, &info);
    3884                 :            : }
    3885                 :            : #endif
    3886                 :            : 
    3887                 :          0 : static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, kernel_siginfo_t *info)
    3888                 :            : {
    3889                 :            :         /* This is only valid for single tasks */
    3890         [ #  # ]:          0 :         if (pid <= 0 || tgid <= 0)
    3891                 :            :                 return -EINVAL;
    3892                 :            : 
    3893                 :            :         /* Not even root can pretend to send signals from the kernel.
    3894                 :            :          * Nor can they impersonate a kill()/tgkill(), which adds source info.
    3895                 :            :          */
    3896   [ #  #  #  # ]:          0 :         if ((info->si_code >= 0 || info->si_code == SI_TKILL) &&
    3897                 :            :             (task_pid_vnr(current) != pid))
    3898                 :            :                 return -EPERM;
    3899                 :            : 
    3900                 :          0 :         return do_send_specific(tgid, pid, sig, info);
    3901                 :            : }
    3902                 :            : 
    3903                 :          0 : SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig,
    3904                 :            :                 siginfo_t __user *, uinfo)
    3905                 :            : {
    3906                 :          0 :         kernel_siginfo_t info;
    3907                 :          0 :         int ret = __copy_siginfo_from_user(sig, &info, uinfo);
    3908         [ #  # ]:          0 :         if (unlikely(ret))
    3909                 :          0 :                 return ret;
    3910                 :          0 :         return do_rt_tgsigqueueinfo(tgid, pid, sig, &info);
    3911                 :            : }
    3912                 :            : 
    3913                 :            : #ifdef CONFIG_COMPAT
    3914                 :          0 : COMPAT_SYSCALL_DEFINE4(rt_tgsigqueueinfo,
    3915                 :            :                         compat_pid_t, tgid,
    3916                 :            :                         compat_pid_t, pid,
    3917                 :            :                         int, sig,
    3918                 :            :                         struct compat_siginfo __user *, uinfo)
    3919                 :            : {
    3920                 :          0 :         kernel_siginfo_t info;
    3921                 :          0 :         int ret = __copy_siginfo_from_user32(sig, &info, uinfo);
    3922         [ #  # ]:          0 :         if (unlikely(ret))
    3923                 :          0 :                 return ret;
    3924                 :          0 :         return do_rt_tgsigqueueinfo(tgid, pid, sig, &info);
    3925                 :            : }
    3926                 :            : #endif
    3927                 :            : 
    3928                 :            : /*
    3929                 :            :  * For kthreads only, must not be used if cloned with CLONE_SIGHAND
    3930                 :            :  */
    3931                 :       2604 : void kernel_sigaction(int sig, __sighandler_t action)
    3932                 :            : {
    3933                 :       2604 :         spin_lock_irq(&current->sighand->siglock);
    3934         [ +  + ]:       2604 :         current->sighand->action[sig - 1].sa.sa_handler = action;
    3935         [ +  + ]:       2604 :         if (action == SIG_IGN) {
    3936                 :       1302 :                 sigset_t mask;
    3937                 :            : 
    3938                 :       1302 :                 sigemptyset(&mask);
    3939                 :       1302 :                 sigaddset(&mask, sig);
    3940                 :            : 
    3941                 :       1302 :                 flush_sigqueue_mask(&mask, &current->signal->shared_pending);
    3942                 :       1302 :                 flush_sigqueue_mask(&mask, &current->pending);
    3943                 :       1302 :                 recalc_sigpending();
    3944                 :            :         }
    3945                 :       2604 :         spin_unlock_irq(&current->sighand->siglock);
    3946                 :       2604 : }
    3947                 :            : EXPORT_SYMBOL(kernel_sigaction);
    3948                 :            : 
    3949                 :          0 : void __weak sigaction_compat_abi(struct k_sigaction *act,
    3950                 :            :                 struct k_sigaction *oact)
    3951                 :            : {
    3952                 :          0 : }
    3953                 :            : 
    3954                 :      49392 : int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
    3955                 :            : {
    3956         [ +  - ]:      49392 :         struct task_struct *p = current, *t;
    3957                 :      49392 :         struct k_sigaction *k;
    3958                 :      49392 :         sigset_t mask;
    3959                 :            : 
    3960   [ +  -  +  -  :      49392 :         if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig)))
          +  +  +  +  +  
                      - ]
    3961                 :            :                 return -EINVAL;
    3962                 :            : 
    3963                 :      49392 :         k = &p->sighand->action[sig-1];
    3964                 :            : 
    3965                 :      49392 :         spin_lock_irq(&p->sighand->siglock);
    3966         [ +  + ]:      49392 :         if (oact)
    3967                 :       7581 :                 *oact = *k;
    3968                 :            : 
    3969                 :      49392 :         sigaction_compat_abi(act, oact);
    3970                 :            : 
    3971         [ +  + ]:      49392 :         if (act) {
    3972         [ +  + ]:      46830 :                 sigdelsetmask(&act->sa.sa_mask,
    3973                 :            :                               sigmask(SIGKILL) | sigmask(SIGSTOP));
    3974                 :      46830 :                 *k = *act;
    3975                 :            :                 /*
    3976                 :            :                  * POSIX 3.3.1.3:
    3977                 :            :                  *  "Setting a signal action to SIG_IGN for a signal that is
    3978                 :            :                  *   pending shall cause the pending signal to be discarded,
    3979                 :            :                  *   whether or not it is blocked."
    3980                 :            :                  *
    3981                 :            :                  *  "Setting a signal action to SIG_DFL for a signal that is
    3982                 :            :                  *   pending and whose default action is to ignore the signal
    3983                 :            :                  *   (for example, SIGCHLD), shall cause the pending signal to
    3984                 :            :                  *   be discarded, whether or not it is blocked"
    3985                 :            :                  */
    3986   [ +  +  +  + ]:      92610 :                 if (sig_handler_ignored(sig_handler(p, sig), sig)) {
    3987                 :       2961 :                         sigemptyset(&mask);
    3988                 :       2961 :                         sigaddset(&mask, sig);
    3989                 :       2961 :                         flush_sigqueue_mask(&mask, &p->signal->shared_pending);
    3990         [ +  + ]:       5922 :                         for_each_thread(p, t)
    3991                 :       2961 :                                 flush_sigqueue_mask(&mask, &t->pending);
    3992                 :            :                 }
    3993                 :            :         }
    3994                 :            : 
    3995                 :      49392 :         spin_unlock_irq(&p->sighand->siglock);
    3996                 :      49392 :         return 0;
    3997                 :            : }
    3998                 :            : 
    3999                 :            : static int
    4000                 :       1071 : do_sigaltstack (const stack_t *ss, stack_t *oss, unsigned long sp,
    4001                 :            :                 size_t min_ss_size)
    4002                 :            : {
    4003         [ -  + ]:       1071 :         struct task_struct *t = current;
    4004                 :            : 
    4005         [ -  + ]:       1071 :         if (oss) {
    4006                 :          0 :                 memset(oss, 0, sizeof(stack_t));
    4007                 :          0 :                 oss->ss_sp = (void __user *) t->sas_ss_sp;
    4008                 :          0 :                 oss->ss_size = t->sas_ss_size;
    4009                 :          0 :                 oss->ss_flags = sas_ss_flags(sp) |
    4010                 :          0 :                         (current->sas_ss_flags & SS_FLAG_BITS);
    4011                 :            :         }
    4012                 :            : 
    4013         [ +  - ]:       1071 :         if (ss) {
    4014                 :       1071 :                 void __user *ss_sp = ss->ss_sp;
    4015                 :       1071 :                 size_t ss_size = ss->ss_size;
    4016                 :       1071 :                 unsigned ss_flags = ss->ss_flags;
    4017                 :       1071 :                 int ss_mode;
    4018                 :            : 
    4019   [ +  -  +  - ]:       2142 :                 if (unlikely(on_sig_stack(sp)))
    4020                 :            :                         return -EPERM;
    4021                 :            : 
    4022                 :       1071 :                 ss_mode = ss_flags & ~SS_FLAG_BITS;
    4023         [ +  - ]:       1071 :                 if (unlikely(ss_mode != SS_DISABLE && ss_mode != SS_ONSTACK &&
    4024                 :            :                                 ss_mode != 0))
    4025                 :            :                         return -EINVAL;
    4026                 :            : 
    4027         [ +  + ]:       1071 :                 if (ss_mode == SS_DISABLE) {
    4028                 :            :                         ss_size = 0;
    4029                 :            :                         ss_sp = NULL;
    4030                 :            :                 } else {
    4031         [ +  - ]:         21 :                         if (unlikely(ss_size < min_ss_size))
    4032                 :            :                                 return -ENOMEM;
    4033                 :            :                 }
    4034                 :            : 
    4035                 :       1071 :                 t->sas_ss_sp = (unsigned long) ss_sp;
    4036                 :       1071 :                 t->sas_ss_size = ss_size;
    4037                 :       1071 :                 t->sas_ss_flags = ss_flags;
    4038                 :            :         }
    4039                 :            :         return 0;
    4040                 :            : }
    4041                 :            : 
    4042                 :         42 : SYSCALL_DEFINE2(sigaltstack,const stack_t __user *,uss, stack_t __user *,uoss)
    4043                 :            : {
    4044                 :         21 :         stack_t new, old;
    4045                 :         21 :         int err;
    4046   [ +  -  +  - ]:         42 :         if (uss && copy_from_user(&new, uss, sizeof(stack_t)))
    4047                 :            :                 return -EFAULT;
    4048         [ -  + ]:         21 :         err = do_sigaltstack(uss ? &new : NULL, uoss ? &old : NULL,
    4049         [ +  - ]:         21 :                               current_user_stack_pointer(),
    4050                 :            :                               MINSIGSTKSZ);
    4051   [ -  +  -  - ]:         21 :         if (!err && uoss && copy_to_user(uoss, &old, sizeof(stack_t)))
    4052                 :          0 :                 err = -EFAULT;
    4053                 :         21 :         return err;
    4054                 :            : }
    4055                 :            : 
    4056                 :       1050 : int restore_altstack(const stack_t __user *uss)
    4057                 :            : {
    4058                 :       1050 :         stack_t new;
    4059         [ +  - ]:       1050 :         if (copy_from_user(&new, uss, sizeof(stack_t)))
    4060                 :            :                 return -EFAULT;
    4061                 :       1050 :         (void)do_sigaltstack(&new, NULL, current_user_stack_pointer(),
    4062                 :            :                              MINSIGSTKSZ);
    4063                 :            :         /* squash all but EFAULT for now */
    4064                 :       1050 :         return 0;
    4065                 :            : }
    4066                 :            : 
    4067                 :          0 : int __save_altstack(stack_t __user *uss, unsigned long sp)
    4068                 :            : {
    4069                 :          0 :         struct task_struct *t = current;
    4070         [ #  # ]:          0 :         int err = __put_user((void __user *)t->sas_ss_sp, &uss->ss_sp) |
    4071         [ #  # ]:          0 :                 __put_user(t->sas_ss_flags, &uss->ss_flags) |
    4072         [ #  # ]:          0 :                 __put_user(t->sas_ss_size, &uss->ss_size);
    4073         [ #  # ]:          0 :         if (err)
    4074                 :            :                 return err;
    4075         [ #  # ]:          0 :         if (t->sas_ss_flags & SS_AUTODISARM)
    4076                 :          0 :                 sas_ss_reset(t);
    4077                 :            :         return 0;
    4078                 :            : }
    4079                 :            : 
    4080                 :            : #ifdef CONFIG_COMPAT
    4081                 :          0 : static int do_compat_sigaltstack(const compat_stack_t __user *uss_ptr,
    4082                 :            :                                  compat_stack_t __user *uoss_ptr)
    4083                 :            : {
    4084                 :          0 :         stack_t uss, uoss;
    4085                 :          0 :         int ret;
    4086                 :            : 
    4087         [ #  # ]:          0 :         if (uss_ptr) {
    4088                 :          0 :                 compat_stack_t uss32;
    4089         [ #  # ]:          0 :                 if (copy_from_user(&uss32, uss_ptr, sizeof(compat_stack_t)))
    4090                 :          0 :                         return -EFAULT;
    4091                 :          0 :                 uss.ss_sp = compat_ptr(uss32.ss_sp);
    4092                 :          0 :                 uss.ss_flags = uss32.ss_flags;
    4093                 :          0 :                 uss.ss_size = uss32.ss_size;
    4094                 :            :         }
    4095                 :          0 :         ret = do_sigaltstack(uss_ptr ? &uss : NULL, &uoss,
    4096         [ #  # ]:          0 :                              compat_user_stack_pointer(),
    4097                 :            :                              COMPAT_MINSIGSTKSZ);
    4098         [ #  # ]:          0 :         if (ret >= 0 && uoss_ptr)  {
    4099                 :          0 :                 compat_stack_t old;
    4100                 :          0 :                 memset(&old, 0, sizeof(old));
    4101                 :          0 :                 old.ss_sp = ptr_to_compat(uoss.ss_sp);
    4102                 :          0 :                 old.ss_flags = uoss.ss_flags;
    4103                 :          0 :                 old.ss_size = uoss.ss_size;
    4104         [ #  # ]:          0 :                 if (copy_to_user(uoss_ptr, &old, sizeof(compat_stack_t)))
    4105                 :          0 :                         ret = -EFAULT;
    4106                 :            :         }
    4107                 :            :         return ret;
    4108                 :            : }
    4109                 :            : 
    4110                 :          0 : COMPAT_SYSCALL_DEFINE2(sigaltstack,
    4111                 :            :                         const compat_stack_t __user *, uss_ptr,
    4112                 :            :                         compat_stack_t __user *, uoss_ptr)
    4113                 :            : {
    4114                 :          0 :         return do_compat_sigaltstack(uss_ptr, uoss_ptr);
    4115                 :            : }
    4116                 :            : 
    4117                 :          0 : int compat_restore_altstack(const compat_stack_t __user *uss)
    4118                 :            : {
    4119                 :          0 :         int err = do_compat_sigaltstack(uss, NULL);
    4120                 :            :         /* squash all but -EFAULT for now */
    4121         [ #  # ]:          0 :         return err == -EFAULT ? err : 0;
    4122                 :            : }
    4123                 :            : 
    4124                 :          0 : int __compat_save_altstack(compat_stack_t __user *uss, unsigned long sp)
    4125                 :            : {
    4126                 :          0 :         int err;
    4127                 :          0 :         struct task_struct *t = current;
    4128         [ #  # ]:          0 :         err = __put_user(ptr_to_compat((void __user *)t->sas_ss_sp),
    4129                 :          0 :                          &uss->ss_sp) |
    4130         [ #  # ]:          0 :                 __put_user(t->sas_ss_flags, &uss->ss_flags) |
    4131         [ #  # ]:          0 :                 __put_user(t->sas_ss_size, &uss->ss_size);
    4132         [ #  # ]:          0 :         if (err)
    4133                 :            :                 return err;
    4134         [ #  # ]:          0 :         if (t->sas_ss_flags & SS_AUTODISARM)
    4135                 :          0 :                 sas_ss_reset(t);
    4136                 :            :         return 0;
    4137                 :            : }
    4138                 :            : #endif
    4139                 :            : 
    4140                 :            : #ifdef __ARCH_WANT_SYS_SIGPENDING
    4141                 :            : 
    4142                 :            : /**
    4143                 :            :  *  sys_sigpending - examine pending signals
    4144                 :            :  *  @uset: where mask of pending signal is returned
    4145                 :            :  */
    4146                 :          0 : SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, uset)
    4147                 :            : {
    4148                 :          0 :         sigset_t set;
    4149                 :            : 
    4150                 :          0 :         if (sizeof(old_sigset_t) > sizeof(*uset))
    4151                 :            :                 return -EINVAL;
    4152                 :            : 
    4153                 :          0 :         do_sigpending(&set);
    4154                 :            : 
    4155         [ #  # ]:          0 :         if (copy_to_user(uset, &set, sizeof(old_sigset_t)))
    4156                 :          0 :                 return -EFAULT;
    4157                 :            : 
    4158                 :            :         return 0;
    4159                 :            : }
    4160                 :            : 
    4161                 :            : #ifdef CONFIG_COMPAT
    4162                 :          0 : COMPAT_SYSCALL_DEFINE1(sigpending, compat_old_sigset_t __user *, set32)
    4163                 :            : {
    4164                 :          0 :         sigset_t set;
    4165                 :            : 
    4166                 :          0 :         do_sigpending(&set);
    4167                 :            : 
    4168                 :          0 :         return put_user(set.sig[0], set32);
    4169                 :            : }
    4170                 :            : #endif
    4171                 :            : 
    4172                 :            : #endif
    4173                 :            : 
    4174                 :            : #ifdef __ARCH_WANT_SYS_SIGPROCMASK
    4175                 :            : /**
    4176                 :            :  *  sys_sigprocmask - examine and change blocked signals
    4177                 :            :  *  @how: whether to add, remove, or set signals
    4178                 :            :  *  @nset: signals to add or remove (if non-null)
    4179                 :            :  *  @oset: previous value of signal mask if non-null
    4180                 :            :  *
    4181                 :            :  * Some platforms have their own version with special arguments;
    4182                 :            :  * others support only sys_rt_sigprocmask.
    4183                 :            :  */
    4184                 :            : 
    4185                 :          0 : SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
    4186                 :            :                 old_sigset_t __user *, oset)
    4187                 :            : {
    4188                 :          0 :         old_sigset_t old_set, new_set;
    4189                 :          0 :         sigset_t new_blocked;
    4190                 :            : 
    4191         [ #  # ]:          0 :         old_set = current->blocked.sig[0];
    4192                 :            : 
    4193         [ #  # ]:          0 :         if (nset) {
    4194         [ #  # ]:          0 :                 if (copy_from_user(&new_set, nset, sizeof(*nset)))
    4195                 :            :                         return -EFAULT;
    4196                 :            : 
    4197   [ #  #  #  # ]:          0 :                 new_blocked = current->blocked;
    4198                 :            : 
    4199   [ #  #  #  # ]:          0 :                 switch (how) {
    4200                 :          0 :                 case SIG_BLOCK:
    4201                 :          0 :                         sigaddsetmask(&new_blocked, new_set);
    4202                 :            :                         break;
    4203                 :          0 :                 case SIG_UNBLOCK:
    4204                 :          0 :                         sigdelsetmask(&new_blocked, new_set);
    4205                 :            :                         break;
    4206                 :          0 :                 case SIG_SETMASK:
    4207                 :          0 :                         new_blocked.sig[0] = new_set;
    4208                 :          0 :                         break;
    4209                 :            :                 default:
    4210                 :            :                         return -EINVAL;
    4211                 :            :                 }
    4212                 :            : 
    4213                 :          0 :                 set_current_blocked(&new_blocked);
    4214                 :            :         }
    4215                 :            : 
    4216         [ #  # ]:          0 :         if (oset) {
    4217         [ #  # ]:          0 :                 if (copy_to_user(oset, &old_set, sizeof(*oset)))
    4218                 :          0 :                         return -EFAULT;
    4219                 :            :         }
    4220                 :            : 
    4221                 :            :         return 0;
    4222                 :            : }
    4223                 :            : #endif /* __ARCH_WANT_SYS_SIGPROCMASK */
    4224                 :            : 
    4225                 :            : #ifndef CONFIG_ODD_RT_SIGACTION
    4226                 :            : /**
    4227                 :            :  *  sys_rt_sigaction - alter an action taken by a process
    4228                 :            :  *  @sig: signal to be sent
    4229                 :            :  *  @act: new sigaction
    4230                 :            :  *  @oact: used to save the previous sigaction
    4231                 :            :  *  @sigsetsize: size of sigset_t type
    4232                 :            :  */
    4233                 :      98784 : SYSCALL_DEFINE4(rt_sigaction, int, sig,
    4234                 :            :                 const struct sigaction __user *, act,
    4235                 :            :                 struct sigaction __user *, oact,
    4236                 :            :                 size_t, sigsetsize)
    4237                 :            : {
    4238                 :      49392 :         struct k_sigaction new_sa, old_sa;
    4239                 :      49392 :         int ret;
    4240                 :            : 
    4241                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    4242         [ +  - ]:      49392 :         if (sigsetsize != sizeof(sigset_t))
    4243                 :            :                 return -EINVAL;
    4244                 :            : 
    4245   [ +  +  +  - ]:      96222 :         if (act && copy_from_user(&new_sa.sa, act, sizeof(new_sa.sa)))
    4246                 :            :                 return -EFAULT;
    4247                 :            : 
    4248   [ +  +  +  + ]:      93765 :         ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
    4249         [ -  + ]:      49392 :         if (ret)
    4250                 :          0 :                 return ret;
    4251                 :            : 
    4252   [ +  +  -  + ]:      56973 :         if (oact && copy_to_user(oact, &old_sa.sa, sizeof(old_sa.sa)))
    4253                 :          0 :                 return -EFAULT;
    4254                 :            : 
    4255                 :            :         return 0;
    4256                 :            : }
    4257                 :            : #ifdef CONFIG_COMPAT
    4258                 :          0 : COMPAT_SYSCALL_DEFINE4(rt_sigaction, int, sig,
    4259                 :            :                 const struct compat_sigaction __user *, act,
    4260                 :            :                 struct compat_sigaction __user *, oact,
    4261                 :            :                 compat_size_t, sigsetsize)
    4262                 :            : {
    4263                 :          0 :         struct k_sigaction new_ka, old_ka;
    4264                 :            : #ifdef __ARCH_HAS_SA_RESTORER
    4265                 :          0 :         compat_uptr_t restorer;
    4266                 :            : #endif
    4267                 :          0 :         int ret;
    4268                 :            : 
    4269                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    4270         [ #  # ]:          0 :         if (sigsetsize != sizeof(compat_sigset_t))
    4271                 :            :                 return -EINVAL;
    4272                 :            : 
    4273         [ #  # ]:          0 :         if (act) {
    4274                 :          0 :                 compat_uptr_t handler;
    4275                 :          0 :                 ret = get_user(handler, &act->sa_handler);
    4276                 :          0 :                 new_ka.sa.sa_handler = compat_ptr(handler);
    4277                 :            : #ifdef __ARCH_HAS_SA_RESTORER
    4278                 :          0 :                 ret |= get_user(restorer, &act->sa_restorer);
    4279                 :          0 :                 new_ka.sa.sa_restorer = compat_ptr(restorer);
    4280                 :            : #endif
    4281                 :          0 :                 ret |= get_compat_sigset(&new_ka.sa.sa_mask, &act->sa_mask);
    4282                 :          0 :                 ret |= get_user(new_ka.sa.sa_flags, &act->sa_flags);
    4283         [ #  # ]:          0 :                 if (ret)
    4284                 :            :                         return -EFAULT;
    4285                 :            :         }
    4286                 :            : 
    4287   [ #  #  #  # ]:          0 :         ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
    4288         [ #  # ]:          0 :         if (!ret && oact) {
    4289                 :          0 :                 ret = put_user(ptr_to_compat(old_ka.sa.sa_handler), 
    4290                 :            :                                &oact->sa_handler);
    4291                 :          0 :                 ret |= put_compat_sigset(&oact->sa_mask, &old_ka.sa.sa_mask,
    4292                 :            :                                          sizeof(oact->sa_mask));
    4293                 :          0 :                 ret |= put_user(old_ka.sa.sa_flags, &oact->sa_flags);
    4294                 :            : #ifdef __ARCH_HAS_SA_RESTORER
    4295                 :          0 :                 ret |= put_user(ptr_to_compat(old_ka.sa.sa_restorer),
    4296                 :            :                                 &oact->sa_restorer);
    4297                 :            : #endif
    4298                 :            :         }
    4299                 :          0 :         return ret;
    4300                 :            : }
    4301                 :            : #endif
    4302                 :            : #endif /* !CONFIG_ODD_RT_SIGACTION */
    4303                 :            : 
    4304                 :            : #ifdef CONFIG_OLD_SIGACTION
    4305                 :            : SYSCALL_DEFINE3(sigaction, int, sig,
    4306                 :            :                 const struct old_sigaction __user *, act,
    4307                 :            :                 struct old_sigaction __user *, oact)
    4308                 :            : {
    4309                 :            :         struct k_sigaction new_ka, old_ka;
    4310                 :            :         int ret;
    4311                 :            : 
    4312                 :            :         if (act) {
    4313                 :            :                 old_sigset_t mask;
    4314                 :            :                 if (!access_ok(act, sizeof(*act)) ||
    4315                 :            :                     __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
    4316                 :            :                     __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) ||
    4317                 :            :                     __get_user(new_ka.sa.sa_flags, &act->sa_flags) ||
    4318                 :            :                     __get_user(mask, &act->sa_mask))
    4319                 :            :                         return -EFAULT;
    4320                 :            : #ifdef __ARCH_HAS_KA_RESTORER
    4321                 :            :                 new_ka.ka_restorer = NULL;
    4322                 :            : #endif
    4323                 :            :                 siginitset(&new_ka.sa.sa_mask, mask);
    4324                 :            :         }
    4325                 :            : 
    4326                 :            :         ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
    4327                 :            : 
    4328                 :            :         if (!ret && oact) {
    4329                 :            :                 if (!access_ok(oact, sizeof(*oact)) ||
    4330                 :            :                     __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
    4331                 :            :                     __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) ||
    4332                 :            :                     __put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
    4333                 :            :                     __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
    4334                 :            :                         return -EFAULT;
    4335                 :            :         }
    4336                 :            : 
    4337                 :            :         return ret;
    4338                 :            : }
    4339                 :            : #endif
    4340                 :            : #ifdef CONFIG_COMPAT_OLD_SIGACTION
    4341                 :          0 : COMPAT_SYSCALL_DEFINE3(sigaction, int, sig,
    4342                 :            :                 const struct compat_old_sigaction __user *, act,
    4343                 :            :                 struct compat_old_sigaction __user *, oact)
    4344                 :            : {
    4345                 :          0 :         struct k_sigaction new_ka, old_ka;
    4346                 :          0 :         int ret;
    4347                 :          0 :         compat_old_sigset_t mask;
    4348                 :          0 :         compat_uptr_t handler, restorer;
    4349                 :            : 
    4350         [ #  # ]:          0 :         if (act) {
    4351         [ #  # ]:          0 :                 if (!access_ok(act, sizeof(*act)) ||
    4352         [ #  # ]:          0 :                     __get_user(handler, &act->sa_handler) ||
    4353         [ #  # ]:          0 :                     __get_user(restorer, &act->sa_restorer) ||
    4354         [ #  # ]:          0 :                     __get_user(new_ka.sa.sa_flags, &act->sa_flags) ||
    4355         [ #  # ]:          0 :                     __get_user(mask, &act->sa_mask))
    4356                 :          0 :                         return -EFAULT;
    4357                 :            : 
    4358                 :            : #ifdef __ARCH_HAS_KA_RESTORER
    4359                 :            :                 new_ka.ka_restorer = NULL;
    4360                 :            : #endif
    4361                 :          0 :                 new_ka.sa.sa_handler = compat_ptr(handler);
    4362                 :          0 :                 new_ka.sa.sa_restorer = compat_ptr(restorer);
    4363                 :          0 :                 siginitset(&new_ka.sa.sa_mask, mask);
    4364                 :            :         }
    4365                 :            : 
    4366   [ #  #  #  # ]:          0 :         ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
    4367                 :            : 
    4368         [ #  # ]:          0 :         if (!ret && oact) {
    4369         [ #  # ]:          0 :                 if (!access_ok(oact, sizeof(*oact)) ||
    4370   [ #  #  #  # ]:          0 :                     __put_user(ptr_to_compat(old_ka.sa.sa_handler),
    4371                 :          0 :                                &oact->sa_handler) ||
    4372   [ #  #  #  # ]:          0 :                     __put_user(ptr_to_compat(old_ka.sa.sa_restorer),
    4373                 :          0 :                                &oact->sa_restorer) ||
    4374   [ #  #  #  # ]:          0 :                     __put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
    4375   [ #  #  #  # ]:          0 :                     __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
    4376                 :          0 :                         return -EFAULT;
    4377                 :            :         }
    4378                 :          0 :         return ret;
    4379                 :            : }
    4380                 :            : #endif
    4381                 :            : 
    4382                 :            : #ifdef CONFIG_SGETMASK_SYSCALL
    4383                 :            : 
    4384                 :            : /*
    4385                 :            :  * For backwards compatibility.  Functionality superseded by sigprocmask.
    4386                 :            :  */
    4387                 :          0 : SYSCALL_DEFINE0(sgetmask)
    4388                 :            : {
    4389                 :            :         /* SMP safe */
    4390                 :          0 :         return current->blocked.sig[0];
    4391                 :            : }
    4392                 :            : 
    4393                 :          0 : SYSCALL_DEFINE1(ssetmask, int, newmask)
    4394                 :            : {
    4395                 :          0 :         int old = current->blocked.sig[0];
    4396                 :          0 :         sigset_t newset;
    4397                 :            : 
    4398                 :          0 :         siginitset(&newset, newmask);
    4399                 :          0 :         set_current_blocked(&newset);
    4400                 :            : 
    4401                 :          0 :         return old;
    4402                 :            : }
    4403                 :            : #endif /* CONFIG_SGETMASK_SYSCALL */
    4404                 :            : 
    4405                 :            : #ifdef __ARCH_WANT_SYS_SIGNAL
    4406                 :            : /*
    4407                 :            :  * For backwards compatibility.  Functionality superseded by sigaction.
    4408                 :            :  */
    4409                 :          0 : SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
    4410                 :            : {
    4411                 :          0 :         struct k_sigaction new_sa, old_sa;
    4412                 :          0 :         int ret;
    4413                 :            : 
    4414                 :          0 :         new_sa.sa.sa_handler = handler;
    4415                 :          0 :         new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
    4416                 :          0 :         sigemptyset(&new_sa.sa.sa_mask);
    4417                 :            : 
    4418                 :          0 :         ret = do_sigaction(sig, &new_sa, &old_sa);
    4419                 :            : 
    4420   [ #  #  #  # ]:          0 :         return ret ? ret : (unsigned long)old_sa.sa.sa_handler;
    4421                 :            : }
    4422                 :            : #endif /* __ARCH_WANT_SYS_SIGNAL */
    4423                 :            : 
    4424                 :            : #ifdef __ARCH_WANT_SYS_PAUSE
    4425                 :            : 
    4426                 :          0 : SYSCALL_DEFINE0(pause)
    4427                 :            : {
    4428         [ #  # ]:          0 :         while (!signal_pending(current)) {
    4429                 :          0 :                 __set_current_state(TASK_INTERRUPTIBLE);
    4430                 :          0 :                 schedule();
    4431                 :            :         }
    4432                 :          0 :         return -ERESTARTNOHAND;
    4433                 :            : }
    4434                 :            : 
    4435                 :            : #endif
    4436                 :            : 
    4437                 :          0 : static int sigsuspend(sigset_t *set)
    4438                 :            : {
    4439                 :          0 :         current->saved_sigmask = current->blocked;
    4440                 :          0 :         set_current_blocked(set);
    4441                 :            : 
    4442         [ #  # ]:          0 :         while (!signal_pending(current)) {
    4443                 :          0 :                 __set_current_state(TASK_INTERRUPTIBLE);
    4444                 :          0 :                 schedule();
    4445                 :            :         }
    4446                 :          0 :         set_restore_sigmask();
    4447                 :          0 :         return -ERESTARTNOHAND;
    4448                 :            : }
    4449                 :            : 
    4450                 :            : /**
    4451                 :            :  *  sys_rt_sigsuspend - replace the signal mask for a value with the
    4452                 :            :  *      @unewset value until a signal is received
    4453                 :            :  *  @unewset: new signal mask value
    4454                 :            :  *  @sigsetsize: size of sigset_t type
    4455                 :            :  */
    4456                 :          0 : SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)
    4457                 :            : {
    4458                 :          0 :         sigset_t newset;
    4459                 :            : 
    4460                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    4461         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    4462                 :            :                 return -EINVAL;
    4463                 :            : 
    4464         [ #  # ]:          0 :         if (copy_from_user(&newset, unewset, sizeof(newset)))
    4465                 :            :                 return -EFAULT;
    4466                 :          0 :         return sigsuspend(&newset);
    4467                 :            : }
    4468                 :            :  
    4469                 :            : #ifdef CONFIG_COMPAT
    4470                 :          0 : COMPAT_SYSCALL_DEFINE2(rt_sigsuspend, compat_sigset_t __user *, unewset, compat_size_t, sigsetsize)
    4471                 :            : {
    4472                 :          0 :         sigset_t newset;
    4473                 :            : 
    4474                 :            :         /* XXX: Don't preclude handling different sized sigset_t's.  */
    4475         [ #  # ]:          0 :         if (sigsetsize != sizeof(sigset_t))
    4476                 :            :                 return -EINVAL;
    4477                 :            : 
    4478         [ #  # ]:          0 :         if (get_compat_sigset(&newset, unewset))
    4479                 :            :                 return -EFAULT;
    4480                 :          0 :         return sigsuspend(&newset);
    4481                 :            : }
    4482                 :            : #endif
    4483                 :            : 
    4484                 :            : #ifdef CONFIG_OLD_SIGSUSPEND
    4485                 :            : SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
    4486                 :            : {
    4487                 :            :         sigset_t blocked;
    4488                 :            :         siginitset(&blocked, mask);
    4489                 :            :         return sigsuspend(&blocked);
    4490                 :            : }
    4491                 :            : #endif
    4492                 :            : #ifdef CONFIG_OLD_SIGSUSPEND3
    4493                 :          0 : SYSCALL_DEFINE3(sigsuspend, int, unused1, int, unused2, old_sigset_t, mask)
    4494                 :            : {
    4495                 :          0 :         sigset_t blocked;
    4496                 :          0 :         siginitset(&blocked, mask);
    4497                 :          0 :         return sigsuspend(&blocked);
    4498                 :            : }
    4499                 :            : #endif
    4500                 :            : 
    4501                 :          0 : __weak const char *arch_vma_name(struct vm_area_struct *vma)
    4502                 :            : {
    4503                 :          0 :         return NULL;
    4504                 :            : }
    4505                 :            : 
    4506                 :         21 : static inline void siginfo_buildtime_checks(void)
    4507                 :            : {
    4508                 :         21 :         BUILD_BUG_ON(sizeof(struct siginfo) != SI_MAX_SIZE);
    4509                 :            : 
    4510                 :            :         /* Verify the offsets in the two siginfos match */
    4511                 :            : #define CHECK_OFFSET(field) \
    4512                 :            :         BUILD_BUG_ON(offsetof(siginfo_t, field) != offsetof(kernel_siginfo_t, field))
    4513                 :            : 
    4514                 :            :         /* kill */
    4515                 :         21 :         CHECK_OFFSET(si_pid);
    4516                 :         21 :         CHECK_OFFSET(si_uid);
    4517                 :            : 
    4518                 :            :         /* timer */
    4519                 :         21 :         CHECK_OFFSET(si_tid);
    4520                 :         21 :         CHECK_OFFSET(si_overrun);
    4521                 :         21 :         CHECK_OFFSET(si_value);
    4522                 :            : 
    4523                 :            :         /* rt */
    4524                 :         21 :         CHECK_OFFSET(si_pid);
    4525                 :         21 :         CHECK_OFFSET(si_uid);
    4526                 :         21 :         CHECK_OFFSET(si_value);
    4527                 :            : 
    4528                 :            :         /* sigchld */
    4529                 :         21 :         CHECK_OFFSET(si_pid);
    4530                 :         21 :         CHECK_OFFSET(si_uid);
    4531                 :         21 :         CHECK_OFFSET(si_status);
    4532                 :         21 :         CHECK_OFFSET(si_utime);
    4533                 :         21 :         CHECK_OFFSET(si_stime);
    4534                 :            : 
    4535                 :            :         /* sigfault */
    4536                 :         21 :         CHECK_OFFSET(si_addr);
    4537                 :         21 :         CHECK_OFFSET(si_addr_lsb);
    4538                 :         21 :         CHECK_OFFSET(si_lower);
    4539                 :         21 :         CHECK_OFFSET(si_upper);
    4540                 :         21 :         CHECK_OFFSET(si_pkey);
    4541                 :            : 
    4542                 :            :         /* sigpoll */
    4543                 :         21 :         CHECK_OFFSET(si_band);
    4544                 :         21 :         CHECK_OFFSET(si_fd);
    4545                 :            : 
    4546                 :            :         /* sigsys */
    4547                 :         21 :         CHECK_OFFSET(si_call_addr);
    4548                 :         21 :         CHECK_OFFSET(si_syscall);
    4549                 :         21 :         CHECK_OFFSET(si_arch);
    4550                 :            : #undef CHECK_OFFSET
    4551                 :            : 
    4552                 :            :         /* usb asyncio */
    4553                 :         21 :         BUILD_BUG_ON(offsetof(struct siginfo, si_pid) !=
    4554                 :            :                      offsetof(struct siginfo, si_addr));
    4555                 :         21 :         if (sizeof(int) == sizeof(void __user *)) {
    4556                 :            :                 BUILD_BUG_ON(sizeof_field(struct siginfo, si_pid) !=
    4557                 :            :                              sizeof(void __user *));
    4558                 :            :         } else {
    4559                 :         21 :                 BUILD_BUG_ON((sizeof_field(struct siginfo, si_pid) +
    4560                 :            :                               sizeof_field(struct siginfo, si_uid)) !=
    4561                 :            :                              sizeof(void __user *));
    4562                 :         21 :                 BUILD_BUG_ON(offsetofend(struct siginfo, si_pid) !=
    4563                 :            :                              offsetof(struct siginfo, si_uid));
    4564                 :            :         }
    4565                 :            : #ifdef CONFIG_COMPAT
    4566                 :         21 :         BUILD_BUG_ON(offsetof(struct compat_siginfo, si_pid) !=
    4567                 :            :                      offsetof(struct compat_siginfo, si_addr));
    4568                 :         21 :         BUILD_BUG_ON(sizeof_field(struct compat_siginfo, si_pid) !=
    4569                 :            :                      sizeof(compat_uptr_t));
    4570                 :         21 :         BUILD_BUG_ON(sizeof_field(struct compat_siginfo, si_pid) !=
    4571                 :            :                      sizeof_field(struct siginfo, si_pid));
    4572                 :            : #endif
    4573                 :            : }
    4574                 :            : 
    4575                 :         21 : void __init signals_init(void)
    4576                 :            : {
    4577                 :         21 :         siginfo_buildtime_checks();
    4578                 :            : 
    4579                 :         21 :         sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
    4580                 :         21 : }
    4581                 :            : 
    4582                 :            : #ifdef CONFIG_KGDB_KDB
    4583                 :            : #include <linux/kdb.h>
    4584                 :            : /*
    4585                 :            :  * kdb_send_sig - Allows kdb to send signals without exposing
    4586                 :            :  * signal internals.  This function checks if the required locks are
    4587                 :            :  * available before calling the main signal code, to avoid kdb
    4588                 :            :  * deadlocks.
    4589                 :            :  */
    4590                 :            : void kdb_send_sig(struct task_struct *t, int sig)
    4591                 :            : {
    4592                 :            :         static struct task_struct *kdb_prev_t;
    4593                 :            :         int new_t, ret;
    4594                 :            :         if (!spin_trylock(&t->sighand->siglock)) {
    4595                 :            :                 kdb_printf("Can't do kill command now.\n"
    4596                 :            :                            "The sigmask lock is held somewhere else in "
    4597                 :            :                            "kernel, try again later\n");
    4598                 :            :                 return;
    4599                 :            :         }
    4600                 :            :         new_t = kdb_prev_t != t;
    4601                 :            :         kdb_prev_t = t;
    4602                 :            :         if (t->state != TASK_RUNNING && new_t) {
    4603                 :            :                 spin_unlock(&t->sighand->siglock);
    4604                 :            :                 kdb_printf("Process is not RUNNING, sending a signal from "
    4605                 :            :                            "kdb risks deadlock\n"
    4606                 :            :                            "on the run queue locks. "
    4607                 :            :                            "The signal has _not_ been sent.\n"
    4608                 :            :                            "Reissue the kill command if you want to risk "
    4609                 :            :                            "the deadlock.\n");
    4610                 :            :                 return;
    4611                 :            :         }
    4612                 :            :         ret = send_signal(sig, SEND_SIG_PRIV, t, PIDTYPE_PID);
    4613                 :            :         spin_unlock(&t->sighand->siglock);
    4614                 :            :         if (ret)
    4615                 :            :                 kdb_printf("Fail to deliver Signal %d to process %d.\n",
    4616                 :            :                            sig, t->pid);
    4617                 :            :         else
    4618                 :            :                 kdb_printf("Signal %d is sent to process %d.\n", sig, t->pid);
    4619                 :            : }
    4620                 :            : #endif  /* CONFIG_KGDB_KDB */

Generated by: LCOV version 1.14