[Lldb-commits] [lldb] [lldb] checks beforehand if lldb can trace/attach a process on FreeBSD. (PR #79662)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Fri Mar 8 09:16:29 PST 2024
================
@@ -48,20 +48,38 @@ static Status EnsureFDFlags(int fd, int flags) {
return error;
}
+static Status CanTrace() {
+ int proc_debug, ret;
+ size_t len = sizeof(proc_debug);
+ ret = ::sysctlbyname("security.bsd.unprivileged_proc_debug", &proc_debug,
+ &len, nullptr, 0);
+ if (ret != 0)
+ return Status("sysctlbyname() security.bsd.unprivileged_proc_debug failed");
+
+ if (proc_debug < 1)
+ return Status(
+ "process debug disabled by security.bsd.unprivileged_proc_debug oid");
+
+ return {};
+}
+
// Public Static Methods
llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
NativeProcessFreeBSD::Manager::Launch(ProcessLaunchInfo &launch_info,
NativeDelegate &native_delegate) {
Log *log = GetLog(POSIXLog::Process);
-
Status status;
+
::pid_t pid = ProcessLauncherPosixFork()
.LaunchProcess(launch_info, status)
.GetProcessId();
LLDB_LOG(log, "pid = {0:x}", pid);
if (status.Fail()) {
+ auto error = CanTrace();
LLDB_LOG(log, "failed to launch process: {0}", status);
+ if (status.Fail())
+ return error.ToError();
----------------
DavidSpickett wrote:
FYI I fixed a mistake here - https://github.com/llvm/llvm-project/commit/73b2d672c1c8318cd16a02812c39ae3997b9dbcd
The rest look correct to me.
https://github.com/llvm/llvm-project/pull/79662
More information about the lldb-commits
mailing list