version 1.116, 2015/10/18 01:32:05 |
version 1.117, 2015/10/25 20:39:54 |
|
|
#include <sys/vmmeter.h> |
#include <sys/vmmeter.h> |
#include <sys/tty.h> |
#include <sys/tty.h> |
#include <sys/wait.h> |
#include <sys/wait.h> |
|
#define PLEDGENAMES |
|
#include <sys/pledge.h> |
|
#undef PLEDGENAMES |
#define _KERNEL |
#define _KERNEL |
#include <errno.h> |
#include <errno.h> |
#undef _KERNEL |
#undef _KERNEL |
|
|
static void ktrsysret(struct ktr_sysret *, size_t); |
static void ktrsysret(struct ktr_sysret *, size_t); |
static void ktruser(struct ktr_user *, size_t); |
static void ktruser(struct ktr_user *, size_t); |
static void ktrexec(const char*, size_t); |
static void ktrexec(const char*, size_t); |
|
static void ktrpledge(struct ktr_pledge *, size_t); |
static void setemul(const char *); |
static void setemul(const char *); |
static void usage(void); |
static void usage(void); |
static void ioctldecode(int); |
static void ioctldecode(int); |
|
|
case KTR_EXECENV: |
case KTR_EXECENV: |
ktrexec(m, ktrlen); |
ktrexec(m, ktrlen); |
break; |
break; |
|
case KTR_PLEDGE: |
|
ktrpledge((struct ktr_pledge *)m, ktrlen); |
|
break; |
} |
} |
if (tail) |
if (tail) |
(void)fflush(stdout); |
(void)fflush(stdout); |
|
|
case KTR_EXECENV: |
case KTR_EXECENV: |
type = "ENV "; |
type = "ENV "; |
break; |
break; |
|
case KTR_PLEDGE: |
|
type = "PLDG"; |
|
break; |
default: |
default: |
(void)snprintf(unknown, sizeof unknown, "UNKNOWN(%d)", |
(void)snprintf(unknown, sizeof unknown, "UNKNOWN(%d)", |
kth->ktr_type); |
kth->ktr_type); |
|
|
len -= l + 1; |
len -= l + 1; |
ptr += l + 1; |
ptr += l + 1; |
} |
} |
|
} |
|
|
|
static void |
|
ktrpledge(struct ktr_pledge *pledge, size_t len) |
|
{ |
|
int i; |
|
|
|
if (len < sizeof(struct ktr_pledge)) |
|
errx(1, "invalid ktr pledge length %zu", len); |
|
|
|
if (pledge->syscall >= current->nsysnames || pledge->syscall < 0) |
|
(void)printf("[%d]", pledge->syscall); |
|
else |
|
(void)printf("%s", current->sysnames[pledge->syscall]); |
|
printf(", "); |
|
for (i = 0; pledgenames[i].bits != 0; i++) { |
|
if (pledgenames[i].bits & pledge->code) { |
|
printf("\"%s\"", pledgenames[i].name); |
|
break; |
|
} |
|
} |
|
(void)printf(", errno %d", pledge->error); |
|
if (fancy) |
|
(void)printf(" %s", strerror(pledge->error)); |
|
printf("\n"); |
} |
} |
|
|
static void |
static void |