1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:25:10 +00:00

UserspaceEmulator: Implement geteuid, getegid, ptsname syscalls

This commit is contained in:
Brendan Coles 2020-12-16 22:53:00 +00:00 committed by Andreas Kling
parent c4176b0da1
commit c8fb00fe4d
2 changed files with 25 additions and 0 deletions

View file

@ -408,8 +408,12 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
return virt$unveil(arg1);
case SC_getuid:
return virt$getuid();
case SC_geteuid:
return virt$geteuid();
case SC_getgid:
return virt$getgid();
case SC_getegid:
return virt$getegid();
case SC_setuid:
return virt$setuid(arg1);
case SC_setgid:
@ -505,6 +509,8 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
return virt$clock_nanosleep(arg1);
case SC_readlink:
return virt$readlink(arg1);
case SC_ptsname:
return virt$ptsname(arg1, arg2, arg3);
case SC_allocate_tls:
return virt$allocate_tls(arg1);
case SC_beep:
@ -1061,11 +1067,21 @@ uid_t Emulator::virt$getuid()
return getuid();
}
uid_t Emulator::virt$geteuid()
{
return geteuid();
}
gid_t Emulator::virt$getgid()
{
return getgid();
}
gid_t Emulator::virt$getegid()
{
return getegid();
}
int Emulator::virt$setuid(uid_t uid)
{
return syscall(SC_setuid, uid);
@ -1690,6 +1706,12 @@ u32 Emulator::virt$allocate_tls(size_t size)
return tls_base;
}
int Emulator::virt$ptsname(int fd, FlatPtr buffer, size_t buffer_size)
{
auto pts = mmu().copy_buffer_from_vm(buffer, buffer_size);
return syscall(SC_ptsname, fd, pts.data(), pts.size());
}
int Emulator::virt$beep()
{
return syscall(SC_beep);