mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	 9c1da8b5ee
			
		
	
	
		9c1da8b5ee
		
	
	
	
	
		
			
			target_rlimit64 contains uint64_t fields, so it's 8-byte aligned on
some hosts, while some guests may align their respective type on a
4-byte boundary. This may lead to an unaligned access, which is an UB.
Fix by defining the fields as abi_ullong. This makes the host alignment
match that of the guest, and lets the compiler know that it should emit
code that can deal with the guest alignment.
While at it, also use __get_user() and __put_user() instead of
tswap64().
Fixes: 163a05a839 ("linux-user: Implement prlimit64 syscall")
Reported-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20230224003907.263914-2-iii@linux.ibm.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
		
	
			
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Target definitions of RLIMIT_* constants. These may be overridden by an
 | |
|  * architecture specific header if needed.
 | |
|  */
 | |
| 
 | |
| #ifndef GENERIC_TARGET_RESOURCE_H
 | |
| #define GENERIC_TARGET_RESOURCE_H
 | |
| 
 | |
| struct target_rlimit {
 | |
|     abi_ulong rlim_cur;
 | |
|     abi_ulong rlim_max;
 | |
| };
 | |
| 
 | |
| struct target_rlimit64 {
 | |
|     abi_ullong rlim_cur;
 | |
|     abi_ullong rlim_max;
 | |
| };
 | |
| 
 | |
| #define TARGET_RLIM_INFINITY    ((abi_ulong)-1)
 | |
| 
 | |
| #define TARGET_RLIMIT_CPU               0
 | |
| #define TARGET_RLIMIT_FSIZE             1
 | |
| #define TARGET_RLIMIT_DATA              2
 | |
| #define TARGET_RLIMIT_STACK             3
 | |
| #define TARGET_RLIMIT_CORE              4
 | |
| #define TARGET_RLIMIT_RSS               5
 | |
| #define TARGET_RLIMIT_NPROC             6
 | |
| #define TARGET_RLIMIT_NOFILE            7
 | |
| #define TARGET_RLIMIT_MEMLOCK           8
 | |
| #define TARGET_RLIMIT_AS                9
 | |
| #define TARGET_RLIMIT_LOCKS             10
 | |
| #define TARGET_RLIMIT_SIGPENDING        11
 | |
| #define TARGET_RLIMIT_MSGQUEUE          12
 | |
| #define TARGET_RLIMIT_NICE              13
 | |
| #define TARGET_RLIMIT_RTPRIO            14
 | |
| #define TARGET_RLIMIT_RTTIME            15
 | |
| 
 | |
| #endif
 |