mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 18:22:45 +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
	
	 Brendan Coles
						Brendan Coles