mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:32:44 +00:00 
			
		
		
		
	Kernel: Prevent using copy_from_user() for timespec/timeval
These structs can be inconsistent, for example if the amount of microseconds is negative or larger than 1'000'000. Therefore, they should not be copied as-is. Use copy_time_from_user instead.
This commit is contained in:
		
							parent
							
								
									8598240193
								
							
						
					
					
						commit
						e510c41fd2
					
				
					 2 changed files with 22 additions and 0 deletions
				
			
		|  | @ -43,6 +43,7 @@ class String; | |||
| class StringBuilder; | ||||
| class StringImpl; | ||||
| class StringView; | ||||
| class Time; | ||||
| class URL; | ||||
| class FlyString; | ||||
| class Utf32View; | ||||
|  | @ -175,6 +176,7 @@ using AK::String; | |||
| using AK::StringBuilder; | ||||
| using AK::StringImpl; | ||||
| using AK::StringView; | ||||
| using AK::Time; | ||||
| using AK::Traits; | ||||
| using AK::URL; | ||||
| using AK::Utf32View; | ||||
|  |  | |||
|  | @ -102,6 +102,26 @@ template<typename T> | |||
|     return copy_from_user(dest, src.unsafe_userspace_ptr(), sizeof(T)); | ||||
| } | ||||
| 
 | ||||
| #define DEPRECATE_COPY_FROM_USER_TYPE(T, REPLACEMENT)                                                                                \ | ||||
|     template<>                                                                                                                       \ | ||||
|     [[nodiscard]] inline __attribute__((deprecated("use " #REPLACEMENT " instead"))) bool copy_from_user<T>(T*, const T*)            \ | ||||
|     {                                                                                                                                \ | ||||
|         VERIFY_NOT_REACHED();                                                                                                        \ | ||||
|     }                                                                                                                                \ | ||||
|     template<>                                                                                                                       \ | ||||
|     [[nodiscard]] inline __attribute__((deprecated("use " #REPLACEMENT " instead"))) bool copy_from_user<T>(T*, Userspace<const T*>) \ | ||||
|     {                                                                                                                                \ | ||||
|         VERIFY_NOT_REACHED();                                                                                                        \ | ||||
|     }                                                                                                                                \ | ||||
|     template<>                                                                                                                       \ | ||||
|     [[nodiscard]] inline __attribute__((deprecated("use " #REPLACEMENT " instead"))) bool copy_from_user<T>(T*, Userspace<T*>)       \ | ||||
|     {                                                                                                                                \ | ||||
|         VERIFY_NOT_REACHED();                                                                                                        \ | ||||
|     } | ||||
| 
 | ||||
| DEPRECATE_COPY_FROM_USER_TYPE(timespec, copy_time_from_user) | ||||
| DEPRECATE_COPY_FROM_USER_TYPE(timeval, copy_time_from_user) | ||||
| 
 | ||||
| template<typename T> | ||||
| [[nodiscard]] inline bool copy_to_user(Userspace<T*> dest, const T* src) | ||||
| { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ben Wiederhake
						Ben Wiederhake