mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 21:58:10 +00:00

Loading libunicodedata.so will require dlopen(), which in turn requires mmap(). The 'prot_exec' pledge is needed for this. Further, the .so itself must be unveiled for reading. The "real" path is unveiled (libunicodedata.so.serenity) as the symlink (libunicodedata.so) itself cannot be unveiled.
27 lines
957 B
C++
27 lines
957 B
C++
/*
|
|
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibCore/EventLoop.h>
|
|
#include <LibCore/LocalServer.h>
|
|
#include <LibCore/System.h>
|
|
#include <LibIPC/SingleServer.h>
|
|
#include <LibMain/Main.h>
|
|
#include <WebContent/ClientConnection.h>
|
|
|
|
ErrorOr<int> serenity_main(Main::Arguments)
|
|
{
|
|
Core::EventLoop event_loop;
|
|
TRY(Core::System::pledge("stdio recvfd sendfd accept unix rpath prot_exec"));
|
|
TRY(Core::System::unveil("/res", "r"));
|
|
TRY(Core::System::unveil("/tmp/portal/request", "rw"));
|
|
TRY(Core::System::unveil("/tmp/portal/image", "rw"));
|
|
TRY(Core::System::unveil("/tmp/portal/websocket", "rw"));
|
|
TRY(Core::System::unveil("/usr/lib/libunicodedata.so.serenity", "r"));
|
|
TRY(Core::System::unveil(nullptr, nullptr));
|
|
|
|
auto client = TRY(IPC::take_over_accepted_client_from_system_server<WebContent::ClientConnection>());
|
|
return event_loop.exec();
|
|
}
|