diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index a8bc5e61c9..42cc29c3e5 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/DevTools/UserspaceEmulator/Emulator.cpp @@ -278,6 +278,10 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3) return virt$getuid(); case SC_getgid: return virt$getgid(); + case SC_setuid: + return virt$setuid(arg1); + case SC_setgid: + return virt$setgid(arg2); case SC_close: return virt$close(arg1); case SC_fstat: @@ -791,6 +795,16 @@ gid_t Emulator::virt$getgid() return getgid(); } +int Emulator::virt$setuid(uid_t uid) +{ + return syscall(SC_setuid, uid); +} + +int Emulator::virt$setgid(gid_t gid) +{ + return syscall(SC_setgid, gid); +} + u32 Emulator::virt$write(int fd, FlatPtr data, ssize_t size) { if (size < 0) diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index f08fd53efa..2093e3d30f 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -88,6 +88,8 @@ private: u32 virt$pledge(u32); uid_t virt$getuid(); gid_t virt$getgid(); + int virt$setuid(uid_t); + int virt$setgid(gid_t); u32 virt$read(int, FlatPtr, ssize_t); u32 virt$write(int, FlatPtr, ssize_t); u32 virt$mprotect(FlatPtr, size_t, int);