From patchwork Mon Oct 14 21:49:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Myers X-Patchwork-Id: 1176659 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-105950-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="LDn4/zEc"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46sXKJ0C2Jz9sP4 for ; Tue, 15 Oct 2019 08:49:55 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:mime-version :content-type; q=dns; s=default; b=UvVzleh1nACMEIYQnku68lR3tWFSw 8SXHGBgbsI0yzisXqYh3JQIqFXyvbOvBGmGqH9ljFkgLyKC3J4aXND3T+UVzMTkE XmQs0fCvvA/rVRoeLegrSZtyxonoMcRnVVRl0uhAX67CHeQZTcLf0n/4IishWbiI O1MGPgdDxXo0l4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:mime-version :content-type; s=default; bh=cPgBv1iNmIF5BZq4LZIFAvdhjlI=; b=LDn 4/zEcnlko/es0qQRKfR0hNmkr+w3sxIg8A0Z4QG/PkCTRN6/TiEyPYhyeKZaUhnL nLU/ufNRrMSJiOn3+kcJSr0cj+990b6bCdWdAj9y791HFSfyS3zxNWVUYi9LxI5W 5oqWQl7BTkYr/Nt20UQaZFnPpyqNU2nrFUf12VRk= Received: (qmail 38546 invoked by alias); 14 Oct 2019 21:49:49 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 38535 invoked by uid 89); 14 Oct 2019 21:49:49 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-15.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: esa2.mentor.iphmx.com IronPort-SDR: hr6OR3VheubOX8dCcy6lC9oWSrlQl4OLXjauvduLlNfaznWjy5tt1VDKHqHTwBW5/qWQuPtLYS BSukRjK+vtQTaUKdzNmikj1imkOKFpPlAEHSo3hngDfmoYZ2ZuW4OxWHRI5lYlP+dfJ6FPcr4L u80Pg+DLoRk2BoXXGFIEGs/yDrXP4g4VT2zsCqtsL4812IQjfAc1UdiDtEnnfoyOLv9apJzLrS NRCJqC5iyr9G52ho3hfhzR12RkwPm1TsRejBaAFLq+dg0OnJzNGL+e8hy5kzwRa00bG35ZVltp 1Qs= IronPort-SDR: zk/WAYO3z0kdJ7xq5ZUUxI0dRYIwdZlU2fvQ0C+hbSNzDl817EScEm6kIpgzQ8yJZIO2YYOrEN tUGc9ASYEU80weKcxQVcf5ZqmvApmUt9z1NO4MWw+sVOAePtTXGZ4NdxGRndgeoNFWGFjI6vv2 5KibgpvBpUo7H0tdsPSKlo5/X5u9CHk4bcSDChngW2Fgrs1Rl5kQcnnJ2ue8ZSYySk6bAYdr+P SrRGsTlxLX56O4vCP4PQpg2hXm802h0FQTtQ0EQsWIFf81DpC+7P1s8VXcGFE2rRsfXzS37tRx PO0= Date: Mon, 14 Oct 2019 21:49:22 +0000 From: Joseph Myers To: Subject: Add PTRACE_GET_SYSCALL_INFO from Linux 5.3 to sys/ptrace.h Message-ID: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Linux 5.3 adds a PTRACE_GET_SYSCALL_INFO constant, with an associated structure and PTRACE_SYSCALL_INFO_* constants. This patch adds these to sys/ptrace.h in glibc (PTRACE_GET_SYSCALL_INFO in each architecture version, the rest in bits/ptrace-shared.h). As with previous such constants and associated structures, the glibc version of the structure is named struct __ptrace_syscall_info. Tested for x86_64, and with build-many-glibcs.py. Reviewed-by: Dmitry V. Levin diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h index cf9f29f885..5f724aeffe 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h @@ -136,8 +136,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/arm/sys/ptrace.h b/sysdeps/unix/sysv/linux/arm/sys/ptrace.h index 2965248da4..c586fe4db1 100644 --- a/sysdeps/unix/sysv/linux/arm/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/arm/sys/ptrace.h @@ -196,8 +196,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/bits/ptrace-shared.h b/sysdeps/unix/sysv/linux/bits/ptrace-shared.h index 1dc1ec79b1..f351d2f45b 100644 --- a/sysdeps/unix/sysv/linux/bits/ptrace-shared.h +++ b/sysdeps/unix/sysv/linux/bits/ptrace-shared.h @@ -52,6 +52,15 @@ enum __ptrace_eventcodes PTRACE_EVENT_STOP = 128 }; +/* Type of stop for PTRACE_GET_SYSCALL_INFO. */ +enum __ptrace_get_syscall_info_op +{ + PTRACE_SYSCALL_INFO_NONE = 0, + PTRACE_SYSCALL_INFO_ENTRY = 1, + PTRACE_SYSCALL_INFO_EXIT = 2, + PTRACE_SYSCALL_INFO_SECCOMP = 3 +}; + /* Arguments for PTRACE_PEEKSIGINFO. */ struct __ptrace_peeksiginfo_args { @@ -73,6 +82,44 @@ struct __ptrace_seccomp_metadata __uint64_t flags; /* Output: filter's flags. */ }; +/* Results of PTRACE_GET_SYSCALL_INFO. */ +struct __ptrace_syscall_info +{ + __uint8_t op; /* One of the enum + __ptrace_get_syscall_info_op + values. */ + __uint32_t arch __attribute__ ((__aligned__ (4))); /* AUDIT_ARCH_* + value. */ + __uint64_t instruction_pointer; /* Instruction pointer. */ + __uint64_t stack_pointer; /* Stack pointer. */ + union + { + /* System call number and arguments, for + PTRACE_SYSCALL_INFO_ENTRY. */ + struct + { + __uint64_t nr; + __uint64_t args[6]; + } entry; + /* System call return value and error flag, for + PTRACE_SYSCALL_INFO_EXIT. */ + struct + { + __int64_t rval; + __uint8_t is_error; + } exit; + /* System call number, arguments and SECCOMP_RET_DATA portion of + SECCOMP_RET_TRACE return value, for + PTRACE_SYSCALL_INFO_SECCOMP. */ + struct + { + __uint64_t nr; + __uint64_t args[6]; + __uint32_t ret_data; + } seccomp; + }; +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h b/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h index 92e3ae901a..07da89d2c4 100644 --- a/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h @@ -149,8 +149,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h index 939e7e6690..6d69462048 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h @@ -38,6 +38,7 @@ __BEGIN_DECLS # undef PTRACE_GETREGSET # undef PTRACE_GETSIGINFO # undef PTRACE_GETSIGMASK +# undef PTRACE_GET_SYSCALL_INFO # undef PTRACE_GETVRREGS # undef PTRACE_GETVSRREGS # undef PTRACE_INTERRUPT @@ -241,8 +242,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h index 70b92d113e..9a6cbaeb40 100644 --- a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h @@ -79,6 +79,7 @@ __BEGIN_DECLS # undef PTRACE_EVENT_SECCOMP # undef PTRACE_EVENT_STOP # undef PTRACE_PEEKSIGINFO_SHARED +# undef PTRACE_GET_SYSCALL_INFO #endif /* Type of the REQUEST argument to `ptrace.' */ enum __ptrace_request @@ -198,6 +199,10 @@ enum __ptrace_request PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e, +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO + PTRACE_PEEKUSR_AREA = 0x5000, #define PTRACE_PEEKUSR_AREA PTRACE_PEEKUSR_AREA diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h b/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h index fd0fc37e14..73e54036a8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h @@ -217,8 +217,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h index c99fde3441..61981e849c 100644 --- a/sysdeps/unix/sysv/linux/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/sys/ptrace.h @@ -166,8 +166,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/x86/sys/ptrace.h b/sysdeps/unix/sysv/linux/x86/sys/ptrace.h index 7f0c16fd3e..9f21385fa0 100644 --- a/sysdeps/unix/sysv/linux/x86/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/x86/sys/ptrace.h @@ -186,8 +186,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO };