=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/kdump/kdump.c,v retrieving revision 1.116 retrieving revision 1.117 diff -u -r1.116 -r1.117 --- src/usr.bin/kdump/kdump.c 2015/10/18 01:32:05 1.116 +++ src/usr.bin/kdump/kdump.c 2015/10/25 20:39:54 1.117 @@ -1,4 +1,4 @@ -/* $OpenBSD: kdump.c,v 1.116 2015/10/18 01:32:05 deraadt Exp $ */ +/* $OpenBSD: kdump.c,v 1.117 2015/10/25 20:39:54 deraadt Exp $ */ /*- * Copyright (c) 1988, 1993 @@ -46,6 +46,9 @@ #include #include #include +#define PLEDGENAMES +#include +#undef PLEDGENAMES #define _KERNEL #include #undef _KERNEL @@ -148,6 +151,7 @@ static void ktrsysret(struct ktr_sysret *, size_t); static void ktruser(struct ktr_user *, size_t); static void ktrexec(const char*, size_t); +static void ktrpledge(struct ktr_pledge *, size_t); static void setemul(const char *); static void usage(void); static void ioctldecode(int); @@ -310,6 +314,9 @@ case KTR_EXECENV: ktrexec(m, ktrlen); break; + case KTR_PLEDGE: + ktrpledge((struct ktr_pledge *)m, ktrlen); + break; } if (tail) (void)fflush(stdout); @@ -399,6 +406,9 @@ case KTR_EXECENV: type = "ENV "; break; + case KTR_PLEDGE: + type = "PLDG"; + break; default: (void)snprintf(unknown, sizeof unknown, "UNKNOWN(%d)", kth->ktr_type); @@ -1426,6 +1436,31 @@ len -= 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