1*c06ef173SDavid CARLIER // RUN: %clangxx %s -o %t && %run %t %p 2*c06ef173SDavid CARLIER 3*c06ef173SDavid CARLIER #include <assert.h> 4*c06ef173SDavid CARLIER #include <errno.h> 5*c06ef173SDavid CARLIER #include <unistd.h> 6*c06ef173SDavid CARLIER #include <sys/procctl.h> 7*c06ef173SDavid CARLIER main()8*c06ef173SDavid CARLIERint main() { 9*c06ef173SDavid CARLIER struct procctl_reaper_status status = {0}; 10*c06ef173SDavid CARLIER int res, aslr; 11*c06ef173SDavid CARLIER res = procctl(P_PID, getpid(), PROC_REAP_STATUS, &status); 12*c06ef173SDavid CARLIER if (res < 0) { 13*c06ef173SDavid CARLIER assert(errno == EPERM); 14*c06ef173SDavid CARLIER return 0; 15*c06ef173SDavid CARLIER } 16*c06ef173SDavid CARLIER 17*c06ef173SDavid CARLIER assert(status.rs_flags >= REAPER_STATUS_OWNED); 18*c06ef173SDavid CARLIER 19*c06ef173SDavid CARLIER res = procctl(P_PID, getpid(), PROC_ASLR_STATUS, &aslr); 20*c06ef173SDavid CARLIER if (res < 0) { 21*c06ef173SDavid CARLIER assert(errno == EPERM); 22*c06ef173SDavid CARLIER return 0; 23*c06ef173SDavid CARLIER } 24*c06ef173SDavid CARLIER 25*c06ef173SDavid CARLIER assert(aslr >= PROC_ASLR_FORCE_ENABLE); 26*c06ef173SDavid CARLIER 27*c06ef173SDavid CARLIER return 0; 28*c06ef173SDavid CARLIER } 29