瀏覽代碼

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 11 年之前
父節點
當前提交
868acbfc1a
共有 2 個文件被更改,包括 6 次插入1 次删除
  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);