linux/include/uapi/linux/cn_proc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: LGPL-2.1 WITH Linux-syscall-note */
   2/*
   3 * cn_proc.h - process events connector
   4 *
   5 * Copyright (C) Matt Helsley, IBM Corp. 2005
   6 * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin
   7 * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com>
   8 * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net>
   9 *
  10 * This program is free software; you can redistribute it and/or modify it
  11 * under the terms of version 2.1 of the GNU Lesser General Public License
  12 * as published by the Free Software Foundation.
  13 *
  14 * This program is distributed in the hope that it would be useful, but
  15 * WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17 */
  18
  19#ifndef _UAPICN_PROC_H
  20#define _UAPICN_PROC_H
  21
  22#include <linux/types.h>
  23
  24/*
  25 * Userspace sends this enum to register with the kernel that it is listening
  26 * for events on the connector.
  27 */
  28enum proc_cn_mcast_op {
  29        PROC_CN_MCAST_LISTEN = 1,
  30        PROC_CN_MCAST_IGNORE = 2
  31};
  32
  33/*
  34 * From the user's point of view, the process
  35 * ID is the thread group ID and thread ID is the internal
  36 * kernel "pid". So, fields are assigned as follow:
  37 *
  38 *  In user space     -  In  kernel space
  39 *
  40 * parent process ID  =  parent->tgid
  41 * parent thread  ID  =  parent->pid
  42 * child  process ID  =  child->tgid
  43 * child  thread  ID  =  child->pid
  44 */
  45
  46struct proc_event {
  47        enum what {
  48                /* Use successive bits so the enums can be used to record
  49                 * sets of events as well
  50                 */
  51                PROC_EVENT_NONE = 0x00000000,
  52                PROC_EVENT_FORK = 0x00000001,
  53                PROC_EVENT_EXEC = 0x00000002,
  54                PROC_EVENT_UID  = 0x00000004,
  55                PROC_EVENT_GID  = 0x00000040,
  56                PROC_EVENT_SID  = 0x00000080,
  57                PROC_EVENT_PTRACE = 0x00000100,
  58                PROC_EVENT_COMM = 0x00000200,
  59                /* "next" should be 0x00000400 */
  60                /* "last" is the last process event: exit,
  61                 * while "next to last" is coredumping event */
  62                PROC_EVENT_COREDUMP = 0x40000000,
  63                PROC_EVENT_EXIT = 0x80000000
  64        } what;
  65        __u32 cpu;
  66        __u64 __attribute__((aligned(8))) timestamp_ns;
  67                /* Number of nano seconds since system boot */
  68        union { /* must be last field of proc_event struct */
  69                struct {
  70                        __u32 err;
  71                } ack;
  72
  73                struct fork_proc_event {
  74                        __kernel_pid_t parent_pid;
  75                        __kernel_pid_t parent_tgid;
  76                        __kernel_pid_t child_pid;
  77                        __kernel_pid_t child_tgid;
  78                } fork;
  79
  80                struct exec_proc_event {
  81                        __kernel_pid_t process_pid;
  82                        __kernel_pid_t process_tgid;
  83                } exec;
  84
  85                struct id_proc_event {
  86                        __kernel_pid_t process_pid;
  87                        __kernel_pid_t process_tgid;
  88                        union {
  89                                __u32 ruid; /* task uid */
  90                                __u32 rgid; /* task gid */
  91                        } r;
  92                        union {
  93                                __u32 euid;
  94                                __u32 egid;
  95                        } e;
  96                } id;
  97
  98                struct sid_proc_event {
  99                        __kernel_pid_t process_pid;
 100                        __kernel_pid_t process_tgid;
 101                } sid;
 102
 103                struct ptrace_proc_event {
 104                        __kernel_pid_t process_pid;
 105                        __kernel_pid_t process_tgid;
 106                        __kernel_pid_t tracer_pid;
 107                        __kernel_pid_t tracer_tgid;
 108                } ptrace;
 109
 110                struct comm_proc_event {
 111                        __kernel_pid_t process_pid;
 112                        __kernel_pid_t process_tgid;
 113                        char           comm[16];
 114                } comm;
 115
 116                struct coredump_proc_event {
 117                        __kernel_pid_t process_pid;
 118                        __kernel_pid_t process_tgid;
 119                        __kernel_pid_t parent_pid;
 120                        __kernel_pid_t parent_tgid;
 121                } coredump;
 122
 123                struct exit_proc_event {
 124                        __kernel_pid_t process_pid;
 125                        __kernel_pid_t process_tgid;
 126                        __u32 exit_code, exit_signal;
 127                        __kernel_pid_t parent_pid;
 128                        __kernel_pid_t parent_tgid;
 129                } exit;
 130
 131        } event_data;
 132};
 133
 134#endif /* _UAPICN_PROC_H */
 135