c1ceec3404
waitpid() cannot be used in kernel mode unless SCHED_HAVE_PARENT is selected -> add dependency if BUILD_KERNEL is selected. Why? Because without SCHED_HAVE_PARENT waitpid() works in a non-standard way, meaning it does not use SIGCHLD to wake the parent, as it should. Also, returning the child status via stat_loc corrupts memory as stat_loc points to the parent's address environment: pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options) { ... group->tg_statloc = stat_loc; ... } And later when the status is returned, the child writes to tg_statloc, which points to the parent's address environment -> random memory corruption: static inline void nxtask_exitwakeup(FAR struct tcb_s *tcb, int status) { ... if (group->tg_statloc != NULL) { *group->tg_statloc = status << 8; } ... } |
||
---|---|---|
.. | ||
addrenv | ||
clock | ||
environ | ||
group | ||
init | ||
instrument | ||
irq | ||
misc | ||
module | ||
mqueue | ||
paging | ||
pthread | ||
sched | ||
semaphore | ||
signal | ||
task | ||
timer | ||
tls | ||
wdog | ||
wqueue | ||
CMakeLists.txt | ||
Kconfig | ||
Makefile |