diff options
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 349d44937406..93e72e5feae6 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -897,12 +897,21 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t, | |||
897 | break; | 897 | break; |
898 | } | 898 | } |
899 | } else if (!is_si_special(info)) { | 899 | } else if (!is_si_special(info)) { |
900 | if (sig >= SIGRTMIN && info->si_code != SI_USER) | 900 | if (sig >= SIGRTMIN && info->si_code != SI_USER) { |
901 | /* | 901 | /* |
902 | * Queue overflow, abort. We may abort if the signal was rt | 902 | * Queue overflow, abort. We may abort if the |
903 | * and sent by user using something other than kill(). | 903 | * signal was rt and sent by user using something |
904 | */ | 904 | * other than kill(). |
905 | */ | ||
906 | trace_signal_overflow_fail(sig, group, info); | ||
905 | return -EAGAIN; | 907 | return -EAGAIN; |
908 | } else { | ||
909 | /* | ||
910 | * This is a silent loss of information. We still | ||
911 | * send the signal, but the *info bits are lost. | ||
912 | */ | ||
913 | trace_signal_lose_info(sig, group, info); | ||
914 | } | ||
906 | } | 915 | } |
907 | 916 | ||
908 | out_set: | 917 | out_set: |