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-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20061217101856.GA1285@infradead.org>
Date:	Sun, 17 Dec 2006 10:18:56 +0000
From:	Christoph Hellwig <hch@...radead.org>
To:	Oleg Nesterov <oleg@...sign.ru>
Cc:	Andrew Morton <akpm@...l.org>,
	"Eric W. Biederman" <ebiederm@...ssion.com>,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] kill_something_info: misc cleanups

On Sat, Dec 16, 2006 at 11:05:10PM +0300, Oleg Nesterov wrote:
>  static int kill_something_info(int sig, struct siginfo *info, int pid)
>  {
>  	int ret;
> +
> +	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;

This branch should probably be factored out into a helper of it's own:

static int kill_this_group_info(int sig, struct siginfo *info)
{
	struct task_struct *p;
	int ret = 0, found = 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)
		return -ESRCH;
	return found ? ret : -ESRCH;
}

> +	} else {
> +		struct pid *grp = task_pgrp(current);
> +		if (pid != 0)
> +			grp = find_pid(-pid);
> +		ret = kill_pgrp_info(sig, info, grp);
> +	}

This also looks rather unreadable, an

	} else if (pid) {
		ret = kill_pgrp_info(sig, info, find_pid(-pid));
	} else {
		ret = kill_pgrp_info(sig, info, task_pgrp(current));
	}

might be slightly more code, but also a lot more readable.

-
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