If QUICK_THREADS is not defined (it is not by default, but most
distributions enable it) and task_dir_missing is true (only on very old
kernels), then readtask() forgets to reset some of the struct proc_t t's
members, which later results in double-free()s in free_acquired().
For now, we simply synchronized the list of members to be reset with the
list of members freed in free_acquired().
---------------------------- adapted for newlib branch
. now 'cmd' is also dynamic
. just synchronized with those freed in free_acquired
. QUICK_THREADS is now FALSE_THREADS, serving different purpose
. entire patch will be effectively reverted with upcoming refactor
Signed-off-by: Jim Warner <james.warner@comcast.net>
#ifdef FALSE_THREADS
} else {
- t->cmdline = NULL;
- t->cmdline_v = NULL;
t->environ = NULL;
- t->environ_v = NULL;
+ t->cmdline = NULL;
t->cgname = NULL;
t->cgroup = NULL;
+ t->environ_v = NULL;
+ t->cmdline_v = NULL;
t->cgroup_v = NULL;
t->supgid = NULL;
t->supgrp = NULL;
+ t->cmd = NULL;
t->sd_mach = NULL;
t->sd_ouid = NULL;
t->sd_seat = NULL;