lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Sat, 16 Dec 2006 23:05:10 +0300
From:	Oleg Nesterov <oleg@...sign.ru>
To:	Andrew Morton <akpm@...l.org>
Cc:	"Eric W. Biederman" <ebiederm@...ssion.com>,
	linux-kernel@...r.kernel.org
Subject: [PATCH 1/2] kill_something_info: misc cleanups

On top of
	signal-rewrite-kill_something_info-so-it-uses-newer-helpers.patch

- Factor out sending PIDTYPE_PGID wide signals.

- Use is_init(p) instead of "p->pid > 1". We don't hash idle threads anymore,
  no need to worry about p->pid == 0.

- Use "p != current->group_leader" instead of "p->tgid != current->tgid",
  saves one dereference and kills yet another direct pid_t usage.

- Simplify return value calculation for "pid == -1" case, remove "retval"
  variable.

No functional changes.

Signed-off-by: Oleg Nesterov <oleg@...sign.ru>

--- eric-mm1/kernel/signal.c~1_ksi	2006-12-16 20:57:58.000000000 +0300
+++ eric-mm1/kernel/signal.c	2006-12-16 22:08:43.000000000 +0300
@@ -1317,34 +1317,37 @@ EXPORT_SYMBOL_GPL(kill_pid_info_as_uid);
  * POSIX specifies that kill(-1,sig) is unspecified, but what we have
  * is probably wrong.  Should make it like BSD or SYSV.
  */
-
 static int kill_something_info(int sig, struct siginfo *info, int pid)
 {
 	int ret;
-	rcu_read_lock();
-	if (!pid) {
-		ret = kill_pgrp_info(sig, info, task_pgrp(current));
-	} else if (pid == -1) {
-		int retval = 0, count = 0;
-		struct task_struct * p;
-
-		read_lock(&tasklist_lock);
-		for_each_process(p) {
-			if (p->pid > 1 && p->tgid != current->tgid) {
-				int err = group_send_sig_info(sig, info, p);
-				++count;
-				if (err != -EPERM)
-					retval = err;
-			}
-		}
-		read_unlock(&tasklist_lock);
-		ret = count ? retval : -ESRCH;
-	} else if (pid < 0) {
-		ret = kill_pgrp_info(sig, info, find_pid(-pid));
-	} else {
-		ret = kill_pid_info(sig, info, find_pid(pid));
-	}
-	rcu_read_unlock();
+
+	rcu_read_lock();
+	if (pid > 0) {
+		ret = kill_pid_info(sig, info, find_pid(pid));
+	} else if (pid == -1) {
+		struct task_struct *p;
+		int found = 0;
+
+		ret = 0;
+		read_lock(&tasklist_lock);
+		for_each_process(p)
+			if (!is_init(p) && p != current->group_leader) {
+				int err = group_send_sig_info(sig, info, p);
+				if (err != -EPERM)
+					ret = err;
+				found = 1;
+			}
+		read_unlock(&tasklist_lock);
+		if (!found)
+			ret = -ESRCH;
+	} else {
+		struct pid *grp = task_pgrp(current);
+		if (pid != 0)
+			grp = find_pid(-pid);
+		ret = kill_pgrp_info(sig, info, grp);
+	}
+	rcu_read_unlock();
+
 	return ret;
 }
 

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ