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