mirror_zfs/include
Prakash Surya 8f2503e0af Store copy of tqent_flags prior to servicing task
A preallocated taskq_ent_t's tqent_flags must be checked prior to
servicing the taskq_ent_t. Once a preallocated taskq entry is serviced,
the ownership of the entry is handed back to the caller of
taskq_dispatch, thus the entry's contents can potentially be mangled.

In particular, this is a problem in the case where a preallocated taskq
entry is serviced, and the caller clears it's tqent_flags field. Thus,
when the function returns and task_done is called, it looks as though
the entry is **not** a preallocated task (when in fact it **is** a
preallocated task).

In this situation, task_done will place the preallocated taskq_ent_t
structure onto the taskq_t's free list. This is a **huge** mistake. If
the taskq_ent_t is then freed by the caller of taskq_dispatch, the
taskq_t's free list will hold a pointer to garbage data. Even worse, if
nothing has over written the freed memory before the pointer is
dereferenced, it may still look as though it points to a valid list_head
belonging to a taskq_ent_t structure.

Thus, the task entry's flags are now copied prior to servicing the task.
This copy is then checked to see if it is a preallocated task, and
determine if the entry needs to be passed down to the task_done
function.

Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #71
2011-12-16 16:54:00 -08:00
..
fs Public Release Prep 2010-05-17 15:18:00 -07:00
linux Prepend spl_ to all init/fini functions 2011-11-11 09:18:28 -08:00
rpc Public Release Prep 2010-05-17 15:18:00 -07:00
sharefs Public Release Prep 2010-05-17 15:18:00 -07:00
sys Store copy of tqent_flags prior to servicing task 2011-12-16 16:54:00 -08:00
util Add missing header util/sscanf.h 2010-06-14 14:20:31 -07:00
vm Public Release Prep 2010-05-17 15:18:00 -07:00
.gitignore sun-misc-gitignore 2010-01-08 09:37:54 -08:00
Makefile.am Support custom build directories 2010-09-05 21:49:05 -07:00
Makefile.in Add make rule for building Arch Linux packages 2011-12-14 16:44:10 -08:00
spl-ctl.h Public Release Prep 2010-05-17 15:18:00 -07:00
spl-debug.h Prepend spl_ to all init/fini functions 2011-11-11 09:18:28 -08:00
spl-device.h Public Release Prep 2010-05-17 15:18:00 -07:00
spl-trace.h Split <sys/debug.h> header 2010-07-20 13:29:35 -07:00
splat-ctl.h Add linux compatibility tests 2011-06-21 14:02:46 -07:00
strings.h Public Release Prep 2010-05-17 15:18:00 -07:00
unistd.h Public Release Prep 2010-05-17 15:18:00 -07:00