5 #include "xlat/prctl_options.h"
6 #include "xlat/pr_unalign_flags.h"
7 #include "xlat/pr_mce_kill.h"
8 #include "xlat/pr_mce_kill_policy.h"
9 #include "xlat/pr_set_mm.h"
10 #include "xlat/pr_tsc.h"
13 # define TASK_COMM_LEN 16
16 #ifdef HAVE_LINUX_SECCOMP_H
17 # include <linux/seccomp.h>
19 #include "xlat/seccomp_mode.h"
21 #ifdef HAVE_LINUX_SECUREBITS_H
22 # include <linux/securebits.h>
24 #include "xlat/secbits.h"
26 /* these constants are the same as in <linux/capability.h> */
39 printxval(prctl_options, tcp->u_arg[0], "PR_???");
41 switch (tcp->u_arg[0]) {
45 case PR_GET_TIMERSLACK:
49 return syserror(tcp) ? 0 : RVAL_UDECIMAL;
51 case PR_GET_CHILD_SUBREAPER:
58 printnum_int(tcp, tcp->u_arg[1], "%u");
66 printaddr(tcp->u_arg[1]);
68 printstr(tcp, tcp->u_arg[1], -1);
72 case PR_GET_PDEATHSIG:
75 else if (!umove_or_printaddr(tcp, tcp->u_arg[1], &i)) {
82 case PR_GET_SECUREBITS:
85 if (syserror(tcp) || tcp->u_rval == 0)
87 tcp->auxstr = sprintflags("", secbits, tcp->u_rval);
90 case PR_GET_TID_ADDRESS:
94 printnum_long(tcp, tcp->u_arg[1], "%#lx");
100 else if (!umove_or_printaddr(tcp, tcp->u_arg[1], &i)) {
102 printxval(pr_tsc, i, "PR_TSC_???");
110 else if (!umove_or_printaddr(tcp, tcp->u_arg[1], &i)) {
112 printflags(pr_unalign_flags, i, "PR_UNALIGN_???");
117 /* PR_TASK_PERF_EVENTS_* take no arguments. */
118 case PR_TASK_PERF_EVENTS_DISABLE:
119 case PR_TASK_PERF_EVENTS_ENABLE:
122 case PR_SET_CHILD_SUBREAPER:
123 case PR_SET_DUMPABLE:
127 case PR_SET_KEEPCAPS:
129 tprintf(", %lu", tcp->u_arg[1]);
132 case PR_CAPBSET_DROP:
134 printxval(cap, tcp->u_arg[1], "CAP_???");
137 case PR_CAPBSET_READ:
140 printxval(cap, tcp->u_arg[1], "CAP_???");
143 return syserror(tcp) ? 0 : RVAL_UDECIMAL;
147 printxval(pr_mce_kill, tcp->u_arg[1], "PR_MCE_KILL_???");
149 if (PR_MCE_KILL_SET == tcp->u_arg[1])
150 printxval(pr_mce_kill_policy, tcp->u_arg[2],
153 tprintf("%#lx", tcp->u_arg[2]);
154 for (i = 3; i < tcp->s_ent->nargs; i++)
155 tprintf(", %#lx", tcp->u_arg[i]);
160 printstr(tcp, tcp->u_arg[1], TASK_COMM_LEN);
165 printxval(pr_set_mm, tcp->u_arg[1], "PR_SET_MM_???");
166 for (i = 2; i < tcp->s_ent->nargs; i++)
167 tprintf(", %#lx", tcp->u_arg[i]);
170 case PR_SET_PDEATHSIG:
172 if ((unsigned long) tcp->u_arg[1] > 128)
173 tprintf("%lu", tcp->u_arg[1]);
175 tprints(signame(tcp->u_arg[1]));
180 if (tcp->u_arg[1] == -1)
181 tprints("PR_SET_PTRACER_ANY");
183 tprintf("%lu", tcp->u_arg[1]);
188 printxval(seccomp_mode, tcp->u_arg[1],
190 if (SECCOMP_MODE_STRICT == tcp->u_arg[1])
192 if (SECCOMP_MODE_FILTER == tcp->u_arg[1]) {
194 print_seccomp_filter(tcp, tcp->u_arg[2]);
197 for (i = 2; i < tcp->s_ent->nargs; i++)
198 tprintf(", %#lx", tcp->u_arg[i]);
201 case PR_SET_SECUREBITS:
203 printflags(secbits, tcp->u_arg[1], "SECBIT_???");
206 case PR_SET_TIMERSLACK:
207 tprintf(", %ld", tcp->u_arg[1]);
212 printxval(pr_tsc, tcp->u_arg[1], "PR_TSC_???");
217 printflags(pr_unalign_flags, tcp->u_arg[1], "PR_UNALIGN_???");
220 case PR_SET_NO_NEW_PRIVS:
221 case PR_SET_THP_DISABLE:
222 tprintf(", %lu", tcp->u_arg[1]);
223 for (i = 2; i < tcp->s_ent->nargs; i++)
224 tprintf(", %#lx", tcp->u_arg[i]);
227 case PR_GET_NO_NEW_PRIVS:
228 case PR_GET_THP_DISABLE:
230 return printargs(tcp);
231 return syserror(tcp) ? 0 : RVAL_UDECIMAL;
233 case PR_MCE_KILL_GET:
235 return printargs(tcp);
238 tcp->auxstr = xlookup(pr_mce_kill_policy, tcp->u_rval);
239 return tcp->auxstr ? RVAL_STR : RVAL_UDECIMAL;
241 case PR_MPX_DISABLE_MANAGEMENT:
242 case PR_MPX_ENABLE_MANAGEMENT:
250 #if defined X86_64 || defined X32
251 # include <asm/prctl.h>
252 # include "xlat/archvals.h"
257 printxval(archvals, tcp->u_arg[0], "ARCH_???");
259 switch (tcp->u_arg[0]) {
265 printnum_long(tcp, tcp->u_arg[1], "%#lx");
269 tprintf(", %#lx", tcp->u_arg[1]);
272 #endif /* X86_64 || X32 */