1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:38:11 +00:00

Kernel: Move pledge verification into Process member functions

REQUIRE_PROMISE and REQUIRE_NO_PROMISES were macros for some reason,
and used all over the place.

This patch adds require_promise(Pledge) and require_no_promises()
to Process and makes the macros call these on the current process
instead of inlining code everywhere.
This commit is contained in:
Andreas Kling 2021-09-04 22:26:06 +02:00
parent 5d5a3708c4
commit ba1a6ca971
2 changed files with 44 additions and 17 deletions

View file

@ -893,4 +893,38 @@ KResult Process::try_set_coredump_property(StringView key, StringView value)
return ENOMEM;
};
static constexpr StringView to_string(Pledge promise)
{
#define __ENUMERATE_PLEDGE_PROMISE(x) \
case Pledge::x: \
return #x;
switch (promise) {
ENUMERATE_PLEDGE_PROMISES
}
#undef __ENUMERATE_PLEDGE_PROMISE
VERIFY_NOT_REACHED();
}
void Process::require_no_promises()
{
if (!has_promises())
return;
dbgln("Has made a promise");
Process::current().crash(SIGABRT, 0);
VERIFY_NOT_REACHED();
}
void Process::require_promise(Pledge promise)
{
if (!has_promises())
return;
if (has_promised(promise))
return;
dbgln("Has not pledged {}", to_string(promise));
(void)try_set_coredump_property("pledge_violation"sv, to_string(promise));
crash(SIGABRT, 0);
}
}