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:
parent
5d5a3708c4
commit
ba1a6ca971
2 changed files with 44 additions and 17 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue