1 /*
2 * Check decoding of prctl PR_CAPBSET_READ/PR_CAPBSET_DROP operations.
3 *
4 * Copyright (c) 2021 The strace developers.
5 * All rights reserved.
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10 #include "tests.h"
11 #include "scno.h"
12 #include <stdio.h>
13 #include <unistd.h>
14 #include <linux/prctl.h>
15 #include <linux/capability.h>
16
17 int
18 main(void)
19 {
20 long rc;
21
22 prctl_marker();
23
24 rc = syscall(__NR_prctl, PR_CAPBSET_READ, CAP_AUDIT_CONTROL);
25 printf("prctl(PR_CAPBSET_READ, CAP_AUDIT_CONTROL) = %s\n",
26 sprintrc(rc));
27
28 rc = syscall(__NR_prctl, PR_CAPBSET_READ, CAP_NET_RAW);
29 printf("prctl(PR_CAPBSET_READ, CAP_NET_RAW) = %s\n",
30 sprintrc(rc));
31
32 rc = syscall(__NR_prctl, PR_CAPBSET_READ, 0xff);
33 printf("prctl(PR_CAPBSET_READ, 0xff /* CAP_??? */) = %s\n",
34 sprintrc(rc));
35
36 rc = syscall(__NR_prctl, PR_CAPBSET_DROP, CAP_AUDIT_CONTROL);
37 printf("prctl(PR_CAPBSET_DROP, CAP_AUDIT_CONTROL) = %s\n",
38 sprintrc(rc));
39
40 rc = syscall(__NR_prctl, PR_CAPBSET_DROP, CAP_NET_RAW);
41 printf("prctl(PR_CAPBSET_DROP, CAP_NET_RAW) = %s\n",
42 sprintrc(rc));
43
44 rc = syscall(__NR_prctl, PR_CAPBSET_DROP, 0xff);
45 printf("prctl(PR_CAPBSET_DROP, 0xff /* CAP_??? */) = %s\n",
46 sprintrc(rc));
47
48 puts("+++ exited with 0 +++");
49 return 0;
50 }