Kernel/LibC: Implement chroot
This commit is contained in:
@@ -113,6 +113,7 @@ __BEGIN_DECLS
|
||||
O(SYS_FUTEX, futex) \
|
||||
O(SYS_GETGROUPS, getgroups) \
|
||||
O(SYS_SETGROUPS, setgroups) \
|
||||
O(SYS_CHROOT, chroot) \
|
||||
|
||||
enum Syscall
|
||||
{
|
||||
|
||||
@@ -596,6 +596,7 @@ int unlinkat(int fd, const char* path, int flag);
|
||||
int usleep(useconds_t usec);
|
||||
ssize_t write(int fildes, const void* buf, size_t nbyte);
|
||||
|
||||
int chroot(const char* path);
|
||||
int getpagesize(void);
|
||||
char* getpass(const char* prompt);
|
||||
|
||||
|
||||
@@ -626,6 +626,11 @@ int getopt(int argc, char* const argv[], const char* optstring)
|
||||
return '?';
|
||||
}
|
||||
|
||||
int chroot(const char* path)
|
||||
{
|
||||
return syscall(SYS_CHROOT, path);
|
||||
}
|
||||
|
||||
int getpagesize(void)
|
||||
{
|
||||
return PAGE_SIZE;
|
||||
|
||||
@@ -31,7 +31,8 @@ namespace LibFont
|
||||
|
||||
#if __is_kernel
|
||||
{
|
||||
auto inode = TRY(Kernel::VirtualFileSystem::get().file_from_absolute_path({ 0, 0, 0, 0 }, path, O_RDONLY)).inode;
|
||||
// FIXME: This does not account for chroot
|
||||
auto inode = TRY(Kernel::VirtualFileSystem::get().file_from_absolute_path(Kernel::VirtualFileSystem::get().root_inode(), { 0, 0, 0, 0 }, path, O_RDONLY)).inode;
|
||||
TRY(file_data.resize(inode->size()));
|
||||
TRY(inode->read(0, BAN::ByteSpan(file_data.span())));
|
||||
}
|
||||
|
||||
@@ -128,7 +128,8 @@ namespace LibInput
|
||||
|
||||
#if __is_kernel
|
||||
{
|
||||
auto file = TRY(Kernel::VirtualFileSystem::get().file_from_absolute_path({ 0, 0, 0, 0 }, path, 0));
|
||||
// FIXME: This does not account for chroot
|
||||
auto file = TRY(Kernel::VirtualFileSystem::get().file_from_absolute_path(Kernel::VirtualFileSystem::get().root_inode(), { 0, 0, 0, 0 }, path, 0));
|
||||
TRY(file_data.resize(file.inode->size()));
|
||||
TRY(file.inode->read(0, BAN::ByteSpan { reinterpret_cast<uint8_t*>(file_data.data()), file_data.size() }));
|
||||
canonical_path = file.canonical_path;
|
||||
|
||||
Reference in New Issue
Block a user