]>
Commit | Line | Data |
---|---|---|
a39ff7e2 | 1 | #include <darwintest.h> |
d9a64523 A |
2 | #include "../bsd/sys/proc_info.h" |
3 | #include "../libsyscall/wrappers/libproc/libproc.h" | |
a39ff7e2 A |
4 | #include <stdio.h> |
5 | #include <unistd.h> | |
6 | ||
cb323159 A |
7 | T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true)); |
8 | ||
a39ff7e2 A |
9 | T_DECL(proc_udata_info, "Get and set a proc udata token"){ |
10 | uint64_t token = mach_absolute_time(); | |
11 | proc_info_udata_t udata; | |
12 | int ret; | |
d9a64523 | 13 | |
a39ff7e2 | 14 | udata = token; |
0a7de745 | 15 | ret = proc_udata_info(getpid(), PROC_UDATA_INFO_SET, &udata, sizeof(udata)); |
a39ff7e2 A |
16 | |
17 | #if CONFIG_EMBEDDED | |
18 | T_WITH_ERRNO; | |
19 | T_ASSERT_EQ_INT(ret, -1, "proc_udata_info PROC_UDATA_INFO_SET returns error on non-macOS"); | |
20 | T_SKIP("Remaining tests are only supported on macOS"); | |
21 | #endif /* CONFIG_EMBEDDED */ | |
22 | ||
23 | T_WITH_ERRNO; | |
24 | T_ASSERT_EQ_INT(ret, 0, "proc_udata_info PROC_UDATA_INFO_SET"); | |
25 | ||
26 | T_LOG("udata set to %#llx", udata); | |
27 | ||
0a7de745 A |
28 | bzero(&udata, sizeof(udata)); |
29 | ret = proc_udata_info(getpid(), PROC_UDATA_INFO_GET, &udata, sizeof(udata)); | |
a39ff7e2 A |
30 | T_WITH_ERRNO; |
31 | T_ASSERT_EQ_INT(ret, 0, "proc_udata_info PROC_UDATA_INFO_GET"); | |
32 | ||
33 | T_ASSERT_EQ_ULLONG(token, udata, "proc_udata_info(): retrieved value matches token"); | |
34 | ||
0a7de745 | 35 | ret = proc_udata_info(getpid(), PROC_UDATA_INFO_SET, &udata, sizeof(uint32_t)); |
a39ff7e2 A |
36 | T_WITH_ERRNO; |
37 | T_ASSERT_EQ_INT(ret, -1, "proc_udata_info PROC_UDATA_INFO_SET with invalid size returned -1"); | |
38 | T_ASSERT_EQ_INT(errno, EINVAL, "proc_udata_info PROC_UDATA_INFO_SET with invalid size returned EINVAL"); | |
39 | ||
0a7de745 | 40 | ret = proc_udata_info(getppid(), PROC_UDATA_INFO_GET, &udata, sizeof(udata)); |
a39ff7e2 A |
41 | T_WITH_ERRNO; |
42 | T_ASSERT_EQ_INT(ret, -1, "proc_udata_info PROC_UDATA_INFO_GET returned -1 on attempt against non-self pid"); | |
43 | T_ASSERT_EQ_INT(errno, EACCES, "proc_udata_info PROC_UDATA_INFO_GET set errno to EACCES on attempt against non-self pid"); | |
44 | ||
0a7de745 | 45 | ret = proc_udata_info(getppid(), PROC_UDATA_INFO_SET, &udata, sizeof(udata)); |
a39ff7e2 A |
46 | T_WITH_ERRNO; |
47 | T_ASSERT_EQ_INT(ret, -1, "proc_udata_info PROC_UDATA_INFO_SET returned -1 on attempt against non-self pid"); | |
48 | T_ASSERT_EQ_INT(errno, EACCES, "proc_udata_info PROC_UDATA_INFO_SET set errno to EACCES on attempt against non-self pid"); | |
49 | } |