diff --git a/kernel/signal.c b/kernel/signal.c
index e20724af9b36ce3f21730f36ced0431aa58dd6df..114cf9209bcd848a478a27921d2405427b607d0c 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1220,8 +1220,7 @@ int kill_proc_info_as_uid(int sig, struct siginfo *info, pid_t pid,
 		ret = -ESRCH;
 		goto out_unlock;
 	}
-	if ((!info || ((unsigned long)info != 1 &&
-			(unsigned long)info != 2 && SI_FROMUSER(info)))
+	if ((info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info)))
 	    && (euid != p->suid) && (euid != p->uid)
 	    && (uid != p->suid) && (uid != p->uid)) {
 		ret = -EPERM;