mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:02:45 +00:00 
			
		
		
		
	Kernel: Protect Process::m_name with a spinlock
This also lets us remove the `get_process_name` and `set_process_name` syscalls from the big lock. :^)
This commit is contained in:
		
							parent
							
								
									b26ecca970
								
							
						
					
					
						commit
						fe7b08dad7
					
				
					 13 changed files with 102 additions and 42 deletions
				
			
		|  | @ -25,18 +25,22 @@ ErrorOr<FlatPtr> Process::sys$getppid() | |||
| 
 | ||||
| ErrorOr<FlatPtr> Process::sys$get_process_name(Userspace<char*> buffer, size_t buffer_size) | ||||
| { | ||||
|     VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); | ||||
|     VERIFY_NO_PROCESS_BIG_LOCK(this); | ||||
|     TRY(require_promise(Pledge::stdio)); | ||||
|     if (m_name->length() + 1 > buffer_size) | ||||
|         return ENAMETOOLONG; | ||||
| 
 | ||||
|     TRY(copy_to_user(buffer, m_name->characters(), m_name->length() + 1)); | ||||
|     TRY(m_name.with([&buffer, buffer_size](auto& name) -> ErrorOr<void> { | ||||
|         if (name->length() + 1 > buffer_size) | ||||
|             return ENAMETOOLONG; | ||||
| 
 | ||||
|         return copy_to_user(buffer, name->characters(), name->length() + 1); | ||||
|     })); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| ErrorOr<FlatPtr> Process::sys$set_process_name(Userspace<char const*> user_name, size_t user_name_length) | ||||
| { | ||||
|     VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); | ||||
|     VERIFY_NO_PROCESS_BIG_LOCK(this); | ||||
|     TRY(require_promise(Pledge::proc)); | ||||
|     if (user_name_length > 256) | ||||
|         return ENAMETOOLONG; | ||||
|  | @ -44,7 +48,7 @@ ErrorOr<FlatPtr> Process::sys$set_process_name(Userspace<char const*> user_name, | |||
|     // Empty and whitespace-only names only exist to confuse users.
 | ||||
|     if (name->view().is_whitespace()) | ||||
|         return EINVAL; | ||||
|     m_name = move(name); | ||||
|     set_name(move(name)); | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Atkins
						Sam Atkins