$OpenBSD: patch-base_debug_debugger_posix_cc,v 1.9 2012/08/26 18:47:01 robert Exp $ --- base/debug/debugger_posix.cc.orig Tue Aug 14 09:01:47 2012 +++ base/debug/debugger_posix.cc Wed Aug 15 23:14:34 2012 @@ -103,33 +103,36 @@ bool BeingDebugged() { // Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and // binary interfaces may change. - struct kinfo_proc info; - size_t info_size = sizeof(info); + struct kinfo_proc *info; + size_t info_size; -#if defined(OS_OPENBSD) if (sysctl(mib, arraysize(mib), NULL, &info_size, NULL, 0) < 0) return -1; + info = (struct kinfo_proc *)malloc(info_size); + mib[5] = (info_size / sizeof(struct kinfo_proc)); -#endif - int sysctl_result = sysctl(mib, arraysize(mib), &info, &info_size, NULL, 0); + int sysctl_result = sysctl(mib, arraysize(mib), info, &info_size, NULL, 0); DCHECK_EQ(sysctl_result, 0); if (sysctl_result != 0) { is_set = true; being_debugged = false; - return being_debugged; + goto out; } // This process is being debugged if the P_TRACED flag is set. is_set = true; #if defined(OS_FREEBSD) - being_debugged = (info.ki_flag & P_TRACED) != 0; + being_debugged = (info->ki_flag & P_TRACED) != 0; #elif defined(OS_BSD) - being_debugged = (info.p_flag & P_TRACED) != 0; + being_debugged = (info->p_flag & P_TRACED) != 0; #else - being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0; + being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0; #endif + +out: + free(info); return being_debugged; }