|| ||firstname.lastname@example.org (Eric W. Biederman)|
|| ||[RFC][PATCH 0/5] Task references..|
|| ||Sun, 29 Jan 2006 00:19:56 -0700|
Herbert Poetzl <email@example.com>,
"Serge E. Hallyn" <firstname.lastname@example.org>,
Alan Cox <email@example.com>,
Dave Hansen <firstname.lastname@example.org>,
Arjan van de Ven <email@example.com>,
Suleiman Souhlal <ssouhlal@FreeBSD.org>,
Hubertus Franke <firstname.lastname@example.org>,
Cedric Le Goater <email@example.com>,
Kyle Moffett <firstname.lastname@example.org>|
In the pid virtualization thread it was noticed that currently in
the kernel we have a variables that hold pids of processes or
process groups that we later intend to send signals to.
It was suggest that we instead use pointers to struct task_struct
and reference count them to get around this problem.
The problem was that each file descriptor in the system has one of
these variables in f_owner an instance of struct fown_struct it would
allow user to bypass the limits on the number of processes and
type of megabytes of memory with invisible zombie processes.
For kernel threads where things are tightly coordinated this is not an
issue hand holding a reference to the task struct of a kernel thread
seems the sane thing to do.
The other problem was that pointers to struct task_struct don't map
well to process groups.
I believe the solution to these problems is to introduce a small data
structure that can be reference counted and holds a pointer to a
struct task_struct. The struct task_struct holds a pointer to this
small data structure that will be used to remove the pointer to itself
when the struct task_struct is freed.
The following series of patches implement the data structure and
the routines for manipulating it. As well as implementing this
data structure in two common cases in the kernel, that demonstrate