mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-28 07:18:30 +00:00
Improve pledge() and unveil() further
- Fix getpriority() - Add AT_MINSIGSTKSZ - Fix bugs in BPF code - Show more stuff in printargs.com - Write manual test for pledge.com - pledge() now generates tinier BPF code - Have pledge("exec") only enable execve() - Fix pledge.com chroot setuid functionality - Improve pledge.com unveiling of ape loader
This commit is contained in:
parent
31ac58a57b
commit
f968e2a726
17 changed files with 722 additions and 412 deletions
|
@ -19,6 +19,7 @@
|
|||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/strace.internal.h"
|
||||
#include "libc/calls/struct/rlimit.h"
|
||||
#include "libc/calls/struct/sched_param.h"
|
||||
#include "libc/calls/struct/sigset.h"
|
||||
#include "libc/calls/struct/termios.h"
|
||||
#include "libc/calls/struct/utsname.h"
|
||||
|
@ -29,6 +30,7 @@
|
|||
#include "libc/errno.h"
|
||||
#include "libc/intrin/describeflags.internal.h"
|
||||
#include "libc/intrin/kprintf.h"
|
||||
#include "libc/intrin/promises.internal.h"
|
||||
#include "libc/macros.internal.h"
|
||||
#include "libc/nexgen32e/cpuid4.internal.h"
|
||||
#include "libc/nexgen32e/kcpuids.h"
|
||||
|
@ -52,6 +54,7 @@
|
|||
#include "libc/sysv/consts/f.h"
|
||||
#include "libc/sysv/consts/poll.h"
|
||||
#include "libc/sysv/consts/pr.h"
|
||||
#include "libc/sysv/consts/prio.h"
|
||||
#include "libc/sysv/consts/rlim.h"
|
||||
#include "libc/sysv/consts/sig.h"
|
||||
#include "libc/sysv/consts/termios.h"
|
||||
|
@ -107,6 +110,7 @@ static const struct AuxiliaryValue {
|
|||
{"%-14p", &AT_TIMEKEEP, "AT_TIMEKEEP"},
|
||||
{"%-14p", &AT_STACKPROT, "AT_STACKPROT"},
|
||||
{"%-14p", &AT_EHDRFLAGS, "AT_EHDRFLAGS"},
|
||||
{"%-14d", &AT_MINSIGSTKSZ, "AT_MINSIGSTKSZ"},
|
||||
};
|
||||
|
||||
static const char *FindNameById(const struct IdName *names, unsigned long id) {
|
||||
|
@ -161,6 +165,7 @@ textstartup void __printargs(const char *prologue) {
|
|||
uintptr_t *auxp;
|
||||
struct rlimit rlim;
|
||||
struct utsname uts;
|
||||
struct sched_param sp;
|
||||
struct termios termios;
|
||||
struct AuxiliaryValue *auxinfo;
|
||||
union {
|
||||
|
@ -168,6 +173,8 @@ textstartup void __printargs(const char *prologue) {
|
|||
struct pollfd pfds[128];
|
||||
} u;
|
||||
|
||||
if (!PLEDGED(STDIO)) return;
|
||||
|
||||
--__ftrace;
|
||||
--__strace;
|
||||
e = errno;
|
||||
|
@ -296,6 +303,24 @@ textstartup void __printargs(const char *prologue) {
|
|||
PRINT(" error: sigprocmask() failed %m");
|
||||
}
|
||||
|
||||
if (PLEDGED(PROC)) {
|
||||
PRINT("");
|
||||
PRINT("SCHEDULER");
|
||||
errno = 0;
|
||||
PRINT(" ☼ getpriority(PRIO_PROCESS) → %d% m", getpriority(PRIO_PROCESS, 0));
|
||||
errno = 0;
|
||||
PRINT(" ☼ getpriority(PRIO_PGRP) → %d% m", getpriority(PRIO_PGRP, 0));
|
||||
errno = 0;
|
||||
PRINT(" ☼ getpriority(PRIO_USER) → %d% m", getpriority(PRIO_USER, 0));
|
||||
errno = 0;
|
||||
PRINT(" ☼ sched_getscheduler() → %s% m",
|
||||
DescribeSchedPolicy(sched_getscheduler(0)));
|
||||
errno = 0;
|
||||
if (sched_getparam(0, &sp) != -1) {
|
||||
PRINT(" ☼ sched_getparam() → %d% m", sp.sched_priority);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLinux()) {
|
||||
PRINT("");
|
||||
PRINT("CAPABILITIES");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue