1.\"
2.\" This file and its contents are supplied under the terms of the
3.\" Common Development and Distribution License ("CDDL"), version 1.0.
4.\" You may only use this file in accordance with the terms of version
5.\" 1.0 of the CDDL.
6.\"
7.\" A full copy of the text of the CDDL should have accompanied this
8.\" source.  A copy of the CDDL is also available via the Internet at
9.\" http://www.illumos.org/license/CDDL.
10.\"
11.\"
12.\" Copyright 2015 Joyent, Inc.
13.\"
14.Dd November 27, 2023
15.Dt PR_IOCTL 3PROC
16.Os
17.Sh NAME
18.Nm pr_ioctl
19.Nd inject ioctl system call into victim process
20.Sh LIBRARY
21.Lb libproc
22.Sh SYNOPSIS
23.In libproc.h
24.Ft int
25.Fo pr_ioctl
26.Fa "struct ps_prochandle *P"
27.Fa "int fd"
28.Fa "int code"
29.Fa "void *buf"
30.Fa "size_t size"
31.Fc
32.Sh DESCRIPTION
33The
34.Fn pr_ioctl
35function injects the
36.Xr ioctl 2
37system call into the target process
38.Fa P
39by means of the agent LWP.
40If the process handle
41.Fa P
42is the value
43.Dv NULL
44then this will be equivalent to calling
45.Xr ioctl 2
46on the currently running process.
47.Pp
48The arguments
49.Fa fd ,
50.Fa code ,
51and
52.Fa buf
53have the same meaning as in
54.Xr ioctl 2 .
55See
56.Xr ioctl 2
57for the full description and purpose of the
58.Sy ioctl
59system call and its arguments.
60.Pp
61Unlike the traditional
62.Xr ioctl 2
63system call, the
64.Fn pr_ioctl
65function needs to know the maximum size of the buffer
66.Fa buf
67such that it can be properly injected into the address space of the
68target process.
69.Pp
70The
71.Fn pr_ioctl
72function only works on active processes.
73Process handles that correspond to core files, zombie processes, or ELF objects
74do not support system call injection.
75.Sh RETURN VALUES
76Upon successful completion, the
77.Fn pr_ioctl
78function's return value is that described in
79.Xr ioctl 2 .
80Otherwise,
81.Sy -1
82is returned and
83.Sy errno
84is set to
85.Er ENOSYS
86to indicate that the system call could not be injected.
87.Sh ERRORS
88For the full list of errors see the
89.Sy ERRORS
90section in
91.Xr ioctl 2 .
92.Pp
93The
94.Fn pr_ioctl
95function will fail if:
96.Bl -tag -width Er
97.It Er ENOSYS
98An error occurred while trying to invoke the agent LWP and inject a
99system call in the process handle
100.Fa P
101or the process handle
102.Fa P
103does not support system call injection.
104.El
105.Sh INTERFACE STABILITY
106.Sy Uncommitted
107.Sh MT-LEVEL
108See
109.Sy LOCKING
110in
111.Xr libproc 3LIB .
112.Sh SEE ALSO
113.Xr ioctl 2 ,
114.Xr libproc 3LIB ,
115.Xr proc 5
116