1 | /* |
2 | * Copyright © 2020 Alexey Gladkov <gladkov.alexey@gmail.com> |
3 | * |
4 | * Permission to use, copy, modify, and distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above |
6 | * copyright notice and this permission notice appear in all copies. |
7 | * |
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
15 | */ |
16 | #include <assert.h> |
17 | #include <unistd.h> |
18 | #include <stdlib.h> |
19 | #include <errno.h> |
20 | #include <linux/mount.h> |
21 | #include <linux/unistd.h> |
22 | |
23 | static inline int fsopen(const char *fsname, unsigned int flags) |
24 | { |
25 | return syscall(__NR_fsopen, fsname, flags); |
26 | } |
27 | |
28 | static inline int fsconfig(int fd, unsigned int cmd, const char *key, const void *val, int aux) |
29 | { |
30 | return syscall(__NR_fsconfig, fd, cmd, key, val, aux); |
31 | } |
32 | |
33 | int main(void) |
34 | { |
35 | int fsfd, ret; |
36 | int hidepid = 2; |
37 | |
38 | assert((fsfd = fsopen(fsname: "proc" , flags: 0)) != -1); |
39 | |
40 | ret = fsconfig(fd: fsfd, cmd: FSCONFIG_SET_BINARY, key: "hidepid" , val: &hidepid, aux: 0); |
41 | assert(ret == -1); |
42 | assert(errno == EINVAL); |
43 | |
44 | assert(!fsconfig(fd: fsfd, cmd: FSCONFIG_SET_STRING, key: "hidepid" , val: "2" , aux: 0)); |
45 | assert(!fsconfig(fd: fsfd, cmd: FSCONFIG_SET_STRING, key: "hidepid" , val: "invisible" , aux: 0)); |
46 | |
47 | assert(!close(fsfd)); |
48 | |
49 | return 0; |
50 | } |
51 | |