diff options
Diffstat (limited to 'www/chromium/files/patch-base_debug_debugger__posix.cc')
-rw-r--r-- | www/chromium/files/patch-base_debug_debugger__posix.cc | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/www/chromium/files/patch-base_debug_debugger__posix.cc b/www/chromium/files/patch-base_debug_debugger__posix.cc index 024e9e915cda..63a56d85b575 100644 --- a/www/chromium/files/patch-base_debug_debugger__posix.cc +++ b/www/chromium/files/patch-base_debug_debugger__posix.cc @@ -1,33 +1,45 @@ ---- base/debug/debugger_posix.cc.orig 2021-12-14 11:44:55 UTC +--- base/debug/debugger_posix.cc.orig 2022-02-07 13:39:41 UTC +++ base/debug/debugger_posix.cc -@@ -87,7 +87,7 @@ bool BeingDebugged() { - KERN_PROC, - KERN_PROC_PID, - getpid() --#if defined(OS_OPENBSD) -+#if defined(OS_BSD) - , sizeof(struct kinfo_proc), - 0 +@@ -36,6 +36,10 @@ + #include <sys/sysctl.h> #endif -@@ -95,33 +95,35 @@ bool BeingDebugged() { + ++#if defined(OS_OPENBSD) ++#include <sys/proc.h> ++#endif ++ + #if defined(OS_FREEBSD) + #include <sys/user.h> + #endif +@@ -95,32 +99,51 @@ 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); ++#if defined(OS_OPENBSD) + struct kinfo_proc *info; + size_t info_size; ++#else + struct kinfo_proc info; + size_t info_size = sizeof(info); ++#endif --#if defined(OS_OPENBSD) + #if defined(OS_OPENBSD) if (sysctl(mib, base::size(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, base::size(mib), &info, &info_size, NULL, 0); ++ if ((info = reinterpret_cast<kinfo_proc*>(malloc(info_size))) == NULL) { ++ is_set = true; ++ being_debugged = false; ++ return being_debugged; ++ } ++ + int sysctl_result = sysctl(mib, base::size(mib), info, &info_size, NULL, 0); + #endif + ++#if !defined(OS_OPENBSD) + int sysctl_result = sysctl(mib, base::size(mib), &info, &info_size, NULL, 0); ++#endif DCHECK_EQ(sysctl_result, 0); if (sysctl_result != 0) { is_set = true; @@ -39,18 +51,18 @@ // 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.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; ++#elif defined(OS_OPENBSD) ++ being_debugged = (info->p_psflags & PS_TRACED) != 0; #else -- being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0; -+ being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0; - #endif + being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0; ++#endif + +out: ++#if defined(OS_OPENBSD) + free(info); + #endif return being_debugged; } - |