Explorar o código

Linux ptrace(2) is returning EPERM rather than EBUSY for 'already traced'.

The EPERM check was added only for FreeBSD's sysctl. Just limit the check
to FreeBSD instead.
Bryan Drewery %!s(int64=11) %!d(string=hai) anos
pai
achega
868acbfc1a
Modificáronse 2 ficheiros con 6 adicións e 1 borrados
  1. 1 0
      doc/UPDATES
  2. 5 1
      src/shell.cc

+ 1 - 0
doc/UPDATES

@@ -2,6 +2,7 @@ maint
   * Disable demo TCL support by default to prevent confusion during build.
   * Avoid apparmor ptrace(2) warnings on Ubuntu
   * Allow 'set trace ignore' again. Undoes a change from 2005.
+  * Fix ptrace detection on Linux
 
 1.4.5
   * Remove ahbl as it now positively identifies all hosts as abusive

+ 5 - 1
src/shell.cc

@@ -321,8 +321,12 @@ void check_trace(int start)
           ;
 
         i = ptrace(PT_ATTACH, parent, 0, 0);
+        if (i == -1 &&
         /* EPERM is given on fbsd when security.bsd.unprivileged_proc_debug=0 */
-        if (i == -1 && errno != EPERM && errno != EINVAL) {
+#ifdef __FreeBSD__
+            errno != EPERM &&
+#endif
+            errno != EINVAL) {
           if (start) {
             kill(parent, SIGKILL);
             exit(1);