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

Kernel: Allow opening some device nodes sparingly for jailed processes

From now on, we don't allow jailed processes to open all device nodes in
/dev, but only allow jailed processes to open /dev/full, /dev/zero,
/dev/null, and various TTY and PTY devices (and not including virtual
consoles) so we basically restrict applications to what they can do when
they are in jail.
The motivation for this type of restriction is to ensure that even if a
remote code execution occurred, the damage that can be done is very
small.
We also don't restrict reading and writing on device nodes that were
already opened, because that limit seems not useful, especially in the
case where we do want to provide an OpenFileDescription to such device
but nothing further than that.
This commit is contained in:
Liav A 2022-12-02 11:33:57 +02:00 committed by Andrew Kaster
parent 968e1a6efc
commit d4b65f644e
12 changed files with 39 additions and 2 deletions

View file

@ -58,6 +58,16 @@ ErrorOr<NonnullOwnPtr<KString>> Device::pseudo_path(OpenFileDescription const&)
return KString::formatted("device:{},{}", major(), minor());
}
ErrorOr<NonnullLockRefPtr<OpenFileDescription>> Device::open(int options)
{
TRY(Process::current().jail().with([&](auto& my_jail) -> ErrorOr<void> {
if (my_jail && !is_openable_by_jailed_processes())
return Error::from_errno(EPERM);
return {};
}));
return File::open(options);
}
void Device::process_next_queued_request(Badge<AsyncDeviceRequest>, AsyncDeviceRequest const& completed_request)
{
SpinlockLocker lock(m_requests_lock);