mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 03:58:12 +00:00
UserspaceEmulator: Implement geteuid, getegid, ptsname syscalls
This commit is contained in:
parent
c4176b0da1
commit
c8fb00fe4d
2 changed files with 25 additions and 0 deletions
|
@ -408,8 +408,12 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
||||||
return virt$unveil(arg1);
|
return virt$unveil(arg1);
|
||||||
case SC_getuid:
|
case SC_getuid:
|
||||||
return virt$getuid();
|
return virt$getuid();
|
||||||
|
case SC_geteuid:
|
||||||
|
return virt$geteuid();
|
||||||
case SC_getgid:
|
case SC_getgid:
|
||||||
return virt$getgid();
|
return virt$getgid();
|
||||||
|
case SC_getegid:
|
||||||
|
return virt$getegid();
|
||||||
case SC_setuid:
|
case SC_setuid:
|
||||||
return virt$setuid(arg1);
|
return virt$setuid(arg1);
|
||||||
case SC_setgid:
|
case SC_setgid:
|
||||||
|
@ -505,6 +509,8 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
||||||
return virt$clock_nanosleep(arg1);
|
return virt$clock_nanosleep(arg1);
|
||||||
case SC_readlink:
|
case SC_readlink:
|
||||||
return virt$readlink(arg1);
|
return virt$readlink(arg1);
|
||||||
|
case SC_ptsname:
|
||||||
|
return virt$ptsname(arg1, arg2, arg3);
|
||||||
case SC_allocate_tls:
|
case SC_allocate_tls:
|
||||||
return virt$allocate_tls(arg1);
|
return virt$allocate_tls(arg1);
|
||||||
case SC_beep:
|
case SC_beep:
|
||||||
|
@ -1061,11 +1067,21 @@ uid_t Emulator::virt$getuid()
|
||||||
return getuid();
|
return getuid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uid_t Emulator::virt$geteuid()
|
||||||
|
{
|
||||||
|
return geteuid();
|
||||||
|
}
|
||||||
|
|
||||||
gid_t Emulator::virt$getgid()
|
gid_t Emulator::virt$getgid()
|
||||||
{
|
{
|
||||||
return getgid();
|
return getgid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gid_t Emulator::virt$getegid()
|
||||||
|
{
|
||||||
|
return getegid();
|
||||||
|
}
|
||||||
|
|
||||||
int Emulator::virt$setuid(uid_t uid)
|
int Emulator::virt$setuid(uid_t uid)
|
||||||
{
|
{
|
||||||
return syscall(SC_setuid, uid);
|
return syscall(SC_setuid, uid);
|
||||||
|
@ -1690,6 +1706,12 @@ u32 Emulator::virt$allocate_tls(size_t size)
|
||||||
return tls_base;
|
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()
|
int Emulator::virt$beep()
|
||||||
{
|
{
|
||||||
return syscall(SC_beep);
|
return syscall(SC_beep);
|
||||||
|
|
|
@ -105,7 +105,9 @@ private:
|
||||||
u32 virt$unveil(u32);
|
u32 virt$unveil(u32);
|
||||||
u32 virt$pledge(u32);
|
u32 virt$pledge(u32);
|
||||||
uid_t virt$getuid();
|
uid_t virt$getuid();
|
||||||
|
uid_t virt$geteuid();
|
||||||
gid_t virt$getgid();
|
gid_t virt$getgid();
|
||||||
|
gid_t virt$getegid();
|
||||||
int virt$setuid(uid_t);
|
int virt$setuid(uid_t);
|
||||||
int virt$setgid(gid_t);
|
int virt$setgid(gid_t);
|
||||||
u32 virt$read(int, FlatPtr, ssize_t);
|
u32 virt$read(int, FlatPtr, ssize_t);
|
||||||
|
@ -163,6 +165,7 @@ private:
|
||||||
int virt$watch_file(FlatPtr, size_t);
|
int virt$watch_file(FlatPtr, size_t);
|
||||||
int virt$readlink(FlatPtr);
|
int virt$readlink(FlatPtr);
|
||||||
u32 virt$allocate_tls(size_t);
|
u32 virt$allocate_tls(size_t);
|
||||||
|
int virt$ptsname(int fd, FlatPtr buffer, size_t buffer_size);
|
||||||
int virt$beep();
|
int virt$beep();
|
||||||
|
|
||||||
FlatPtr allocate_vm(size_t size, size_t alignment);
|
FlatPtr allocate_vm(size_t size, size_t alignment);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue