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: <20090527224140.GC6770@redhat.com>
Date:	Thu, 28 May 2009 00:41:40 +0200
From:	Oleg Nesterov <oleg@...hat.com>
To:	Roland McGrath <roland@...hat.com>
Cc:	Christoph Hellwig <hch@...radead.org>, Ingo Molnar <mingo@...e.hu>,
	linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH 7/X] ptrace: mv task->parent ptrace_task->pt_tracer

On 05/26, Roland McGrath wrote:
>
> > But is the current code correct? If we are not traced any longer
> > si_pid/si_uid are not necessary right either, we should calculate them
> > before ptrace_stop(), no?
>
> Yes, though nothing really cares about these values for such cases.
> (It's really only there for dealing with debuggers that were written
> before PTRACE_SETSIGINFO was invented.)
>
> It's probably best now to clean this up so that this logic is
> applied in the tracer causing the resumption rather than in the
> tracee.  i.e. do it in ptrace_resume() and ptrace_detach().

Hmm. Didn't think about this, and I agree this looks nicer...
So, we need something like

	void ptrace_set_exit_code(struct task_struct *child, int exit_code)
	{
		unsigned long flags;

		if (!exit_code)
			child->exit_code = exit_code;

		if (child->exit_code == exit_code)
			return;

		if (lock_task_sighand(child, &flags)) {
			siginfo_t *info = child->last_siginfo;

			if (info && info->info->si_signo != exit_code) {
				info->si_signo = exit_code;
				info->si_errno = 0;
				info->si_code = SI_USER;
				info->si_pid = task_pid_nr_ns(current, child->nsproxy->pid_ns);
				info->si_uid = task_uid(current);

			}
			child->exit_code = exit_code;
			unlock_task_sighand(child, &flags);
		}
	}

And ptrace_resume/ptrace_detach should use ptrace_set_exit_code()
instead of child->exit_code = data.

The disadvantage is, ptrace_notify() does not need this, we add the
little pessimization...

And. This change adds another dependency with arches which implement
their own resume.

So. Do you think this cleanup should be done before/with this series
or we can do it later?

Oleg.

--
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