Skip to content

Commit 629180b

Browse files
linusgawesomekling
authored andcommitted
Kernel: Support pledge() with empty promises
This tells the kernel that the process wants to use pledge, but without pledging anything - effectively restricting it to syscalls that don't require a certain promise. This is part of OpenBSD's pledge() as well, which served as basis for Serenity's.
1 parent b580c00 commit 629180b

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

Kernel/Process.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ class Process
467467

468468
bool has_promises() const
469469
{
470-
return m_promises;
470+
return m_has_promises;
471471
}
472472
bool has_promised(Pledge pledge) const
473473
{
@@ -637,6 +637,7 @@ class Process
637637

638638
RefPtr<Timer> m_alarm_timer;
639639

640+
bool m_has_promises { false };
640641
u32 m_promises { 0 };
641642
u32 m_execpromises { 0 };
642643

Kernel/Syscalls/pledge.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,29 +67,24 @@ int Process::sys$pledge(Userspace<const Syscall::SC_pledge_params*> user_params)
6767
return true;
6868
};
6969

70-
u32 new_promises;
71-
u32 new_execpromises;
70+
u32 new_promises = 0;
71+
u32 new_execpromises = 0;
7272

7373
if (!promises.is_null()) {
74-
new_promises = 0;
7574
if (!parse_pledge(promises, new_promises))
7675
return -EINVAL;
7776
if (m_promises && (!new_promises || new_promises & ~m_promises))
7877
return -EPERM;
79-
} else {
80-
new_promises = m_promises;
8178
}
8279

8380
if (!execpromises.is_null()) {
84-
new_execpromises = 0;
8581
if (!parse_pledge(execpromises, new_execpromises))
8682
return -EINVAL;
8783
if (m_execpromises && (!new_execpromises || new_execpromises & ~m_execpromises))
8884
return -EPERM;
89-
} else {
90-
new_execpromises = m_execpromises;
9185
}
9286

87+
m_has_promises = true;
9388
m_promises = new_promises;
9489
m_execpromises = new_execpromises;
9590

0 commit comments

Comments
 (0)