syd 3.52.0

rock-solid application kernel
Documentation
//
// Syd: rock-solid application kernel
// src/kernel/sys_ptrace.rs: ptrace(2) handler
//
// Copyright (c) 2025, 2026 Ali Polatel <alip@chesswob.org>
//
// SPDX-License-Identifier: GPL-3.0

// SAFETY: This module has been liberated from unsafe code!
#![forbid(unsafe_code)]

use libseccomp::ScmpNotifResp;
use nix::errno::Errno;

use crate::req::UNotifyEventRequest;

const PTRACE_TRACEME: u64 = libc::PTRACE_TRACEME as u64;

pub(crate) fn sys_ptrace(request: UNotifyEventRequest) -> ScmpNotifResp {
    syscall_handler!(request, |request: UNotifyEventRequest| {
        let req = request.scmpreq;

        // We only hook into PTRACE_TRACEME requests.
        assert_eq!(req.data.args[0], PTRACE_TRACEME);

        // Record PTRACE_TRACEME request and emulate as no-op.
        request.add_ptrace(req.pid())?;
        Ok(request.return_syscall(0))
    })
}