Date: Mon, 21 Mar 2016 20:38:30 +0000 From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 208188] multiple identical wait4 results for ptraced processes Message-ID: <bug-208188-8@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D208188 Bug ID: 208188 Summary: multiple identical wait4 results for ptraced processes Product: Base System Version: 10.2-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: freebsd-bugs@FreeBSD.org Reporter: joss.upton@yahoo.com Created attachment 168466 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D168466&action= =3Dedit waitx2.c demonstrate the multiple / identical wait4() results. When ptrace'n a process, wait4() returns the same pid/status multiple times= .=20 This is when a process is ptrace'd, it gets a new parent and saves its old parent (in my case both the new parent and the old are the same process).=20 Then, in proc_reap() called from, e.g. wait4(), the ptrace'd process is reparented back to its "real" parent and an additional SIGCHLD is generated. The attached program demonstrates the problem... On 10.2 it produces output like: 0: pid=3D1348 stopped(5) 1: pid=3D1348 exited(0) 2: pid=3D1348 exited(0) It's impossible to differentiate between 1 & 2 unless I go out of my way to remember that I've already seen process 1348 WIFEXITED or WIFSIGNALED befor= e. The fix is to catch the superfluous SIGCHLD (when the realparent is the pro= cess currently waiting on the process) and stub it out. Patch and example progr= am attached. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-208188-8>