d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe#include <stdio.h>
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe#include <err.h>
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe#include <errno.h>
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe#include <sys/secflags.h>
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe#include <sys/syscall.h>
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Loweint
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowemain(int argc, char **argv)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe{
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe int err = 0;
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe secflagdelta_t act = {0};
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if ((err = syscall(SYS_psecflags, NULL, PSF_INHERIT, NULL)) != 0) {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if (errno != EFAULT)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a NULL procset "
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe "set errno other than EFAULT (%d)", errno);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe } else {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a NULL procset succeeded");
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe }
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if ((err = syscall(SYS_psecflags, (void*)0xdeadbeef,
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe PSF_INHERIT, NULL)) != 0) {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if (errno != EFAULT)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a bad procset "
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe "set errno other than EFAULT (%d)", errno);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe } else {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a bad procset succeeded");
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe }
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if ((err = psecflags(P_PID, P_MYID, PSF_INHERIT, NULL)) != 0) {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if (errno != EFAULT)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a NULL "
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe "delta set errno to other than EFAULT (%d)",
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe errno);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe } else {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a NULL delta succeeded");
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe }
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if ((err = psecflags(P_PID, P_MYID, PSF_INHERIT,
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe (void*)0xdeadbeef)) != 0) {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if (errno != EFAULT)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a bad "
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe "delta set errno to other than EFAULT (%d)",
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe errno);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe } else {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags with a bad delta succeeded");
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe }
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if ((err = psecflags(P_LWPID, P_MYID, PSF_INHERIT, &act)) != 0) {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if (errno != EINVAL)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags of an lwpid set errno "
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe "to other than EINVAL (%d)", errno);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe } else {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set secflags of an lwpid succeeded");
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe }
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if ((err = psecflags(P_LWPID, P_MYID, PSF_EFFECTIVE, &act)) != 0) {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe if (errno != EINVAL)
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set effective secflags set errno "
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe "to other than EINVAL (%d)", errno);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe } else {
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe warnx("attempt to set effective secflags succeeded");
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe }
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe return (0);
d2a70789f056fc6c9ce3ab047b52126d80b0e3daRichard Lowe}