1*33de042dSApple OSS Distributions #include <darwintest.h> 2*33de042dSApple OSS Distributions #include <signal.h> 3*33de042dSApple OSS Distributions #include <spawn.h> 4*33de042dSApple OSS Distributions #include <unistd.h> 5*33de042dSApple OSS Distributions 6*33de042dSApple OSS Distributions #include <mach/mach.h> 7*33de042dSApple OSS Distributions #include <mach/mach_types.h> 8*33de042dSApple OSS Distributions #include <mach/task.h> 9*33de042dSApple OSS Distributions #include <mach/task_policy.h> 10*33de042dSApple OSS Distributions 11*33de042dSApple OSS Distributions extern char **environ; 12*33de042dSApple OSS Distributions 13*33de042dSApple OSS Distributions int task_inspect_for_pid(mach_port_name_t target_tport, int pid, mach_port_name_t *t); 14*33de042dSApple OSS Distributions int task_for_pid(mach_port_name_t target_tport, int pid, mach_port_name_t *t); 15*33de042dSApple OSS Distributions int task_name_for_pid(mach_port_name_t target_tport, int pid, mach_port_name_t *t); 16*33de042dSApple OSS Distributions 17*33de042dSApple OSS Distributions T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true)); 18*33de042dSApple OSS Distributions 19*33de042dSApple OSS Distributions #if defined(UNENTITLED) 20*33de042dSApple OSS Distributions 21*33de042dSApple OSS Distributions T_DECL(task_policy_set_task_name, "task_policy_set with task name (not entitled)", T_META_TAG_VM_PREFERRED) 22*33de042dSApple OSS Distributions { 23*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 24*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 25*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 26*33de042dSApple OSS Distributions }; 27*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 28*33de042dSApple OSS Distributions 29*33de042dSApple OSS Distributions T_SETUPBEGIN; 30*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(), 31*33de042dSApple OSS Distributions &task_name), NULL); 32*33de042dSApple OSS Distributions T_SETUPEND; 33*33de042dSApple OSS Distributions 34*33de042dSApple OSS Distributions T_ASSERT_MACH_ERROR(task_policy_set(task_name, 35*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 36*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 37*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 38*33de042dSApple OSS Distributions KERN_INVALID_ARGUMENT, NULL); 39*33de042dSApple OSS Distributions } 40*33de042dSApple OSS Distributions 41*33de042dSApple OSS Distributions T_DECL(task_policy_set_task, "task_policy_set with task (not entitled)", T_META_TAG_VM_PREFERRED) 42*33de042dSApple OSS Distributions { 43*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 44*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 45*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 46*33de042dSApple OSS Distributions }; 47*33de042dSApple OSS Distributions 48*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(mach_task_self(), 49*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 50*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 51*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 52*33de042dSApple OSS Distributions NULL); 53*33de042dSApple OSS Distributions } 54*33de042dSApple OSS Distributions 55*33de042dSApple OSS Distributions T_DECL(task_policy_set_inspect, "task_policy_set with task inspect (not entitled)", T_META_TAG_VM_PREFERRED) 56*33de042dSApple OSS Distributions { 57*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 58*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 59*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 60*33de042dSApple OSS Distributions }; 61*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 62*33de042dSApple OSS Distributions 63*33de042dSApple OSS Distributions T_SETUPBEGIN; 64*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(), 65*33de042dSApple OSS Distributions &task_inspect), NULL); 66*33de042dSApple OSS Distributions T_SETUPEND; 67*33de042dSApple OSS Distributions 68*33de042dSApple OSS Distributions 69*33de042dSApple OSS Distributions T_ASSERT_MACH_ERROR(task_policy_set(task_inspect, 70*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 71*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 72*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 73*33de042dSApple OSS Distributions KERN_INVALID_ARGUMENT, NULL); 74*33de042dSApple OSS Distributions } 75*33de042dSApple OSS Distributions 76*33de042dSApple OSS Distributions T_DECL(task_policy_set_foreign_task, "task_policy_set for foreign task (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 77*33de042dSApple OSS Distributions { 78*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 79*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 80*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 81*33de042dSApple OSS Distributions }; 82*33de042dSApple OSS Distributions task_t task = TASK_NULL; 83*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 84*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 85*33de042dSApple OSS Distributions pid_t pid = 0; 86*33de042dSApple OSS Distributions 87*33de042dSApple OSS Distributions T_SETUPBEGIN; 88*33de042dSApple OSS Distributions 89*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 90*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 91*33de042dSApple OSS Distributions 92*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid, 93*33de042dSApple OSS Distributions &task), NULL); 94*33de042dSApple OSS Distributions T_SETUPEND; 95*33de042dSApple OSS Distributions 96*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(task, 97*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 98*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 99*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 100*33de042dSApple OSS Distributions NULL); 101*33de042dSApple OSS Distributions 102*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 103*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 104*33de042dSApple OSS Distributions } 105*33de042dSApple OSS Distributions 106*33de042dSApple OSS Distributions T_DECL(task_policy_set_foreign_task_name, "task_policy_set for foreign task name (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 107*33de042dSApple OSS Distributions { 108*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 109*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 110*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 111*33de042dSApple OSS Distributions }; 112*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 113*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 114*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 115*33de042dSApple OSS Distributions pid_t pid = 0; 116*33de042dSApple OSS Distributions 117*33de042dSApple OSS Distributions T_SETUPBEGIN; 118*33de042dSApple OSS Distributions 119*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 120*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 121*33de042dSApple OSS Distributions 122*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid, 123*33de042dSApple OSS Distributions &task_name), NULL); 124*33de042dSApple OSS Distributions T_SETUPEND; 125*33de042dSApple OSS Distributions 126*33de042dSApple OSS Distributions T_ASSERT_MACH_ERROR(task_policy_set(task_name, 127*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 128*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 129*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 130*33de042dSApple OSS Distributions KERN_INVALID_ARGUMENT, NULL); 131*33de042dSApple OSS Distributions 132*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 133*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 134*33de042dSApple OSS Distributions } 135*33de042dSApple OSS Distributions 136*33de042dSApple OSS Distributions T_DECL(task_policy_set_foreign_task_inspect, "task_policy_set for foreign task inspect (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 137*33de042dSApple OSS Distributions { 138*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 139*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 140*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 141*33de042dSApple OSS Distributions }; 142*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 143*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 144*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 145*33de042dSApple OSS Distributions pid_t pid = 0; 146*33de042dSApple OSS Distributions 147*33de042dSApple OSS Distributions T_SETUPBEGIN; 148*33de042dSApple OSS Distributions 149*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 150*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 151*33de042dSApple OSS Distributions 152*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid, 153*33de042dSApple OSS Distributions &task_inspect), NULL); 154*33de042dSApple OSS Distributions T_SETUPEND; 155*33de042dSApple OSS Distributions 156*33de042dSApple OSS Distributions T_ASSERT_MACH_ERROR(task_policy_set(task_inspect, 157*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 158*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 159*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 160*33de042dSApple OSS Distributions KERN_INVALID_ARGUMENT, NULL); 161*33de042dSApple OSS Distributions 162*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 163*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 164*33de042dSApple OSS Distributions } 165*33de042dSApple OSS Distributions 166*33de042dSApple OSS Distributions T_DECL(task_policy_get_name, "task_policy_get with task name (not entitled)", T_META_TAG_VM_PREFERRED) 167*33de042dSApple OSS Distributions { 168*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 169*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 170*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 171*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 172*33de042dSApple OSS Distributions 173*33de042dSApple OSS Distributions T_SETUPBEGIN; 174*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(), 175*33de042dSApple OSS Distributions &task_name), NULL); 176*33de042dSApple OSS Distributions T_SETUPEND; 177*33de042dSApple OSS Distributions 178*33de042dSApple OSS Distributions T_ASSERT_MACH_ERROR(task_policy_get(task_name, 179*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 180*33de042dSApple OSS Distributions (task_policy_t)role, 181*33de042dSApple OSS Distributions &count, 182*33de042dSApple OSS Distributions &get_default), 183*33de042dSApple OSS Distributions KERN_INVALID_ARGUMENT, NULL); 184*33de042dSApple OSS Distributions } 185*33de042dSApple OSS Distributions 186*33de042dSApple OSS Distributions T_DECL(task_policy_get_task, "task_policy_get with task (not entitled)", T_META_TAG_VM_PREFERRED) 187*33de042dSApple OSS Distributions { 188*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 189*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 190*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 191*33de042dSApple OSS Distributions 192*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(mach_task_self(), 193*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 194*33de042dSApple OSS Distributions (task_policy_t)role, 195*33de042dSApple OSS Distributions &count, 196*33de042dSApple OSS Distributions &get_default), 197*33de042dSApple OSS Distributions NULL); 198*33de042dSApple OSS Distributions } 199*33de042dSApple OSS Distributions 200*33de042dSApple OSS Distributions T_DECL(task_policy_get_inspect, "task_policy_get with task inspect (not entitled)", T_META_TAG_VM_PREFERRED) 201*33de042dSApple OSS Distributions { 202*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 203*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 204*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 205*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 206*33de042dSApple OSS Distributions 207*33de042dSApple OSS Distributions T_SETUPBEGIN; 208*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(), 209*33de042dSApple OSS Distributions &task_inspect), NULL); 210*33de042dSApple OSS Distributions T_SETUPEND; 211*33de042dSApple OSS Distributions 212*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect, 213*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 214*33de042dSApple OSS Distributions (task_policy_t)role, 215*33de042dSApple OSS Distributions &count, 216*33de042dSApple OSS Distributions &get_default), 217*33de042dSApple OSS Distributions NULL); 218*33de042dSApple OSS Distributions } 219*33de042dSApple OSS Distributions 220*33de042dSApple OSS Distributions T_DECL(task_policy_get_foreign_task_inspect, "task_policy_get for foreign task inspect (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 221*33de042dSApple OSS Distributions { 222*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 223*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 224*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 225*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 226*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 227*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 228*33de042dSApple OSS Distributions pid_t pid = 0; 229*33de042dSApple OSS Distributions 230*33de042dSApple OSS Distributions T_SETUPBEGIN; 231*33de042dSApple OSS Distributions 232*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 233*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 234*33de042dSApple OSS Distributions 235*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid, 236*33de042dSApple OSS Distributions &task_inspect), NULL); 237*33de042dSApple OSS Distributions T_SETUPEND; 238*33de042dSApple OSS Distributions 239*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect, 240*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 241*33de042dSApple OSS Distributions (task_policy_t)role, 242*33de042dSApple OSS Distributions &count, 243*33de042dSApple OSS Distributions &get_default), 244*33de042dSApple OSS Distributions NULL); 245*33de042dSApple OSS Distributions 246*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 247*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 248*33de042dSApple OSS Distributions } 249*33de042dSApple OSS Distributions 250*33de042dSApple OSS Distributions T_DECL(task_policy_get_foreign_task, "task_policy_get for foreign task (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 251*33de042dSApple OSS Distributions { 252*33de042dSApple OSS Distributions task_t task = TASK_NULL; 253*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 254*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 255*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 256*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 257*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 258*33de042dSApple OSS Distributions pid_t pid = 0; 259*33de042dSApple OSS Distributions 260*33de042dSApple OSS Distributions T_SETUPBEGIN; 261*33de042dSApple OSS Distributions 262*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 263*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 264*33de042dSApple OSS Distributions 265*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid, 266*33de042dSApple OSS Distributions &task), NULL); 267*33de042dSApple OSS Distributions T_SETUPEND; 268*33de042dSApple OSS Distributions 269*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task, 270*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 271*33de042dSApple OSS Distributions (task_policy_t)role, 272*33de042dSApple OSS Distributions &count, 273*33de042dSApple OSS Distributions &get_default), 274*33de042dSApple OSS Distributions NULL); 275*33de042dSApple OSS Distributions 276*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 277*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 278*33de042dSApple OSS Distributions } 279*33de042dSApple OSS Distributions 280*33de042dSApple OSS Distributions T_DECL(task_policy_get_foreign_task_name, "task_policy_get for foreign task name (not entitled)", T_META_TAG_VM_PREFERRED) 281*33de042dSApple OSS Distributions { 282*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 283*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 284*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 285*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 286*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 287*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 288*33de042dSApple OSS Distributions pid_t pid = 0; 289*33de042dSApple OSS Distributions 290*33de042dSApple OSS Distributions T_SETUPBEGIN; 291*33de042dSApple OSS Distributions 292*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 293*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 294*33de042dSApple OSS Distributions 295*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid, 296*33de042dSApple OSS Distributions &task_name), NULL); 297*33de042dSApple OSS Distributions T_SETUPEND; 298*33de042dSApple OSS Distributions 299*33de042dSApple OSS Distributions T_ASSERT_MACH_ERROR(task_policy_get(task_name, 300*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 301*33de042dSApple OSS Distributions (task_policy_t)role, 302*33de042dSApple OSS Distributions &count, 303*33de042dSApple OSS Distributions &get_default), 304*33de042dSApple OSS Distributions KERN_INVALID_ARGUMENT, NULL); 305*33de042dSApple OSS Distributions 306*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 307*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 308*33de042dSApple OSS Distributions } 309*33de042dSApple OSS Distributions 310*33de042dSApple OSS Distributions #else /* ENTITLED */ 311*33de042dSApple OSS Distributions 312*33de042dSApple OSS Distributions T_DECL(task_policy_set_task_name_entitled, "task_policy_set with task name (entitled)", T_META_ASROOT(true), T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 313*33de042dSApple OSS Distributions { 314*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 315*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 316*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 317*33de042dSApple OSS Distributions }; 318*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 319*33de042dSApple OSS Distributions 320*33de042dSApple OSS Distributions T_SETUPBEGIN; 321*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(), 322*33de042dSApple OSS Distributions &task_name), NULL); 323*33de042dSApple OSS Distributions T_SETUPEND; 324*33de042dSApple OSS Distributions 325*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(task_name, 326*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 327*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 328*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 329*33de042dSApple OSS Distributions NULL); 330*33de042dSApple OSS Distributions } 331*33de042dSApple OSS Distributions 332*33de042dSApple OSS Distributions T_DECL(task_policy_set_task_entitled, "task_policy_set with task (entitled)", T_META_TAG_VM_PREFERRED) 333*33de042dSApple OSS Distributions { 334*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 335*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 336*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 337*33de042dSApple OSS Distributions }; 338*33de042dSApple OSS Distributions 339*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(mach_task_self(), 340*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 341*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 342*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 343*33de042dSApple OSS Distributions NULL); 344*33de042dSApple OSS Distributions } 345*33de042dSApple OSS Distributions 346*33de042dSApple OSS Distributions T_DECL(task_policy_set_inspect_entitled, "task_policy_set with task inspect (entitled)", T_META_TAG_VM_PREFERRED) 347*33de042dSApple OSS Distributions { 348*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 349*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 350*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 351*33de042dSApple OSS Distributions }; 352*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 353*33de042dSApple OSS Distributions 354*33de042dSApple OSS Distributions T_SETUPBEGIN; 355*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(), 356*33de042dSApple OSS Distributions &task_inspect), NULL); 357*33de042dSApple OSS Distributions T_SETUPEND; 358*33de042dSApple OSS Distributions 359*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(task_inspect, 360*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 361*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 362*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 363*33de042dSApple OSS Distributions NULL); 364*33de042dSApple OSS Distributions } 365*33de042dSApple OSS Distributions 366*33de042dSApple OSS Distributions T_DECL(task_policy_set_foreign_task_entitled, "task_policy_set for foreign task (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 367*33de042dSApple OSS Distributions { 368*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 369*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 370*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 371*33de042dSApple OSS Distributions }; 372*33de042dSApple OSS Distributions task_t task = TASK_NULL; 373*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 374*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 375*33de042dSApple OSS Distributions pid_t pid = 0; 376*33de042dSApple OSS Distributions 377*33de042dSApple OSS Distributions T_SETUPBEGIN; 378*33de042dSApple OSS Distributions 379*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 380*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 381*33de042dSApple OSS Distributions 382*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid, 383*33de042dSApple OSS Distributions &task), NULL); 384*33de042dSApple OSS Distributions T_SETUPEND; 385*33de042dSApple OSS Distributions 386*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(task, 387*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 388*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 389*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 390*33de042dSApple OSS Distributions NULL); 391*33de042dSApple OSS Distributions 392*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 393*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 394*33de042dSApple OSS Distributions } 395*33de042dSApple OSS Distributions 396*33de042dSApple OSS Distributions T_DECL(task_policy_set_foreign_task_name_entitled, "task_policy_set for foreign task name (entitled)", T_META_ASROOT(true), T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 397*33de042dSApple OSS Distributions { 398*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 399*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 400*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 401*33de042dSApple OSS Distributions }; 402*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 403*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 404*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 405*33de042dSApple OSS Distributions pid_t pid = 0; 406*33de042dSApple OSS Distributions 407*33de042dSApple OSS Distributions T_SETUPBEGIN; 408*33de042dSApple OSS Distributions 409*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 410*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 411*33de042dSApple OSS Distributions 412*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid, 413*33de042dSApple OSS Distributions &task_name), NULL); 414*33de042dSApple OSS Distributions T_SETUPEND; 415*33de042dSApple OSS Distributions 416*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(task_name, 417*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 418*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 419*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 420*33de042dSApple OSS Distributions NULL); 421*33de042dSApple OSS Distributions 422*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 423*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 424*33de042dSApple OSS Distributions } 425*33de042dSApple OSS Distributions 426*33de042dSApple OSS Distributions T_DECL(task_policy_set_foreign_task_inspect_entitled, "task_policy_set for foreign task inspect (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 427*33de042dSApple OSS Distributions { 428*33de042dSApple OSS Distributions struct task_qos_policy qosinfo = { 429*33de042dSApple OSS Distributions .task_latency_qos_tier = LATENCY_QOS_TIER_0, 430*33de042dSApple OSS Distributions .task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0, 431*33de042dSApple OSS Distributions }; 432*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 433*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 434*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 435*33de042dSApple OSS Distributions pid_t pid = 0; 436*33de042dSApple OSS Distributions 437*33de042dSApple OSS Distributions T_SETUPBEGIN; 438*33de042dSApple OSS Distributions 439*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 440*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 441*33de042dSApple OSS Distributions 442*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid, 443*33de042dSApple OSS Distributions &task_inspect), NULL); 444*33de042dSApple OSS Distributions T_SETUPEND; 445*33de042dSApple OSS Distributions 446*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_set(task_inspect, 447*33de042dSApple OSS Distributions TASK_BASE_QOS_POLICY, 448*33de042dSApple OSS Distributions (task_policy_t)&qosinfo, 449*33de042dSApple OSS Distributions TASK_QOS_POLICY_COUNT), 450*33de042dSApple OSS Distributions NULL); 451*33de042dSApple OSS Distributions 452*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 453*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 454*33de042dSApple OSS Distributions } 455*33de042dSApple OSS Distributions 456*33de042dSApple OSS Distributions T_DECL(task_policy_get_name_entitled, "task_policy_get with task name (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 457*33de042dSApple OSS Distributions { 458*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 459*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 460*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 461*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 462*33de042dSApple OSS Distributions 463*33de042dSApple OSS Distributions T_SETUPBEGIN; 464*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(), 465*33de042dSApple OSS Distributions &task_name), NULL); 466*33de042dSApple OSS Distributions T_SETUPEND; 467*33de042dSApple OSS Distributions 468*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task_name, 469*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 470*33de042dSApple OSS Distributions (task_policy_t)role, 471*33de042dSApple OSS Distributions &count, 472*33de042dSApple OSS Distributions &get_default), 473*33de042dSApple OSS Distributions NULL); 474*33de042dSApple OSS Distributions } 475*33de042dSApple OSS Distributions 476*33de042dSApple OSS Distributions T_DECL(task_policy_get_task_entitled, "task_policy_get with task (entitled)", T_META_TAG_VM_PREFERRED) 477*33de042dSApple OSS Distributions { 478*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 479*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 480*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 481*33de042dSApple OSS Distributions 482*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(mach_task_self(), 483*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 484*33de042dSApple OSS Distributions (task_policy_t)role, 485*33de042dSApple OSS Distributions &count, 486*33de042dSApple OSS Distributions &get_default), 487*33de042dSApple OSS Distributions NULL); 488*33de042dSApple OSS Distributions } 489*33de042dSApple OSS Distributions 490*33de042dSApple OSS Distributions T_DECL(task_policy_get_inspect_entitled, "task_policy_get with task inspect (entitled)", T_META_TAG_VM_PREFERRED) 491*33de042dSApple OSS Distributions { 492*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 493*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 494*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 495*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 496*33de042dSApple OSS Distributions 497*33de042dSApple OSS Distributions T_SETUPBEGIN; 498*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(), 499*33de042dSApple OSS Distributions &task_inspect), NULL); 500*33de042dSApple OSS Distributions T_SETUPEND; 501*33de042dSApple OSS Distributions 502*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect, 503*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 504*33de042dSApple OSS Distributions (task_policy_t)role, 505*33de042dSApple OSS Distributions &count, 506*33de042dSApple OSS Distributions &get_default), 507*33de042dSApple OSS Distributions NULL); 508*33de042dSApple OSS Distributions } 509*33de042dSApple OSS Distributions 510*33de042dSApple OSS Distributions T_DECL(task_policy_get_foreign_task_inspect_entitled, "task_policy_get for foreign task inspect (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 511*33de042dSApple OSS Distributions { 512*33de042dSApple OSS Distributions task_inspect_t task_inspect = TASK_INSPECT_NULL; 513*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 514*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 515*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 516*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 517*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 518*33de042dSApple OSS Distributions pid_t pid = 0; 519*33de042dSApple OSS Distributions 520*33de042dSApple OSS Distributions T_SETUPBEGIN; 521*33de042dSApple OSS Distributions 522*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 523*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 524*33de042dSApple OSS Distributions 525*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid, 526*33de042dSApple OSS Distributions &task_inspect), NULL); 527*33de042dSApple OSS Distributions T_SETUPEND; 528*33de042dSApple OSS Distributions 529*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect, 530*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 531*33de042dSApple OSS Distributions (task_policy_t)role, 532*33de042dSApple OSS Distributions &count, 533*33de042dSApple OSS Distributions &get_default), 534*33de042dSApple OSS Distributions NULL); 535*33de042dSApple OSS Distributions 536*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 537*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 538*33de042dSApple OSS Distributions } 539*33de042dSApple OSS Distributions 540*33de042dSApple OSS Distributions T_DECL(task_policy_get_foreign_task_entitled, "task_policy_get for foreign task (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 541*33de042dSApple OSS Distributions { 542*33de042dSApple OSS Distributions task_t task = TASK_NULL; 543*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 544*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 545*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 546*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 547*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 548*33de042dSApple OSS Distributions pid_t pid = 0; 549*33de042dSApple OSS Distributions 550*33de042dSApple OSS Distributions T_SETUPBEGIN; 551*33de042dSApple OSS Distributions 552*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 553*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 554*33de042dSApple OSS Distributions 555*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid, 556*33de042dSApple OSS Distributions &task), NULL); 557*33de042dSApple OSS Distributions T_SETUPEND; 558*33de042dSApple OSS Distributions 559*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task, 560*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 561*33de042dSApple OSS Distributions (task_policy_t)role, 562*33de042dSApple OSS Distributions &count, 563*33de042dSApple OSS Distributions &get_default), 564*33de042dSApple OSS Distributions NULL); 565*33de042dSApple OSS Distributions 566*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 567*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 568*33de042dSApple OSS Distributions } 569*33de042dSApple OSS Distributions 570*33de042dSApple OSS Distributions T_DECL(task_policy_get_foreign_task_name_entitled, "task_policy_get for foreign task name (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED) 571*33de042dSApple OSS Distributions { 572*33de042dSApple OSS Distributions task_name_t task_name = TASK_NAME_NULL; 573*33de042dSApple OSS Distributions struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT]; 574*33de042dSApple OSS Distributions mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT; 575*33de042dSApple OSS Distributions boolean_t get_default = FALSE; 576*33de042dSApple OSS Distributions kern_return_t ret = KERN_FAILURE; 577*33de042dSApple OSS Distributions char *args[] = { "sleep", "10", NULL }; 578*33de042dSApple OSS Distributions pid_t pid = 0; 579*33de042dSApple OSS Distributions 580*33de042dSApple OSS Distributions T_SETUPBEGIN; 581*33de042dSApple OSS Distributions 582*33de042dSApple OSS Distributions ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ); 583*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10"); 584*33de042dSApple OSS Distributions 585*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid, 586*33de042dSApple OSS Distributions &task_name), NULL); 587*33de042dSApple OSS Distributions T_SETUPEND; 588*33de042dSApple OSS Distributions 589*33de042dSApple OSS Distributions T_ASSERT_MACH_SUCCESS(task_policy_get(task_name, 590*33de042dSApple OSS Distributions TASK_CATEGORY_POLICY, 591*33de042dSApple OSS Distributions (task_policy_t)role, 592*33de042dSApple OSS Distributions &count, 593*33de042dSApple OSS Distributions &get_default), 594*33de042dSApple OSS Distributions NULL); 595*33de042dSApple OSS Distributions 596*33de042dSApple OSS Distributions ret = kill(pid, SIGTERM); 597*33de042dSApple OSS Distributions T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep"); 598*33de042dSApple OSS Distributions } 599*33de042dSApple OSS Distributions 600*33de042dSApple OSS Distributions #endif /* UNENTITLED */ 601