linux-user: allow NULL msg in recvfrom
The kernel allows a NULL msg in recvfrom so that he size of the next message may be queried before allocating a correctly sized buffer. This change allows the syscall translator to pass along the NULL msg pointer instead of returning early with EFAULT. Signed-off-by: Zach Reizner <zachr@google.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <CAFNex=DvFCq=AQf+=19fTfw-T8eZZT=3NnFFm2JMFvVr5QgQyA@mail.gmail.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
		
				
					committed by
					
						
						Laurent Vivier
					
				
			
			
				
	
			
			
			
						parent
						
							23fff7a17f
						
					
				
				
					commit
					4a1e6bce23
				
			@@ -3679,9 +3679,14 @@ static abi_long do_recvfrom(int fd, abi_ulong msg, size_t len, int flags,
 | 
			
		||||
    void *host_msg;
 | 
			
		||||
    abi_long ret;
 | 
			
		||||
 | 
			
		||||
    host_msg = lock_user(VERIFY_WRITE, msg, len, 0);
 | 
			
		||||
    if (!host_msg)
 | 
			
		||||
        return -TARGET_EFAULT;
 | 
			
		||||
    if (!msg) {
 | 
			
		||||
        host_msg = NULL;
 | 
			
		||||
    } else {
 | 
			
		||||
        host_msg = lock_user(VERIFY_WRITE, msg, len, 0);
 | 
			
		||||
        if (!host_msg) {
 | 
			
		||||
            return -TARGET_EFAULT;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (target_addr) {
 | 
			
		||||
        if (get_user_u32(addrlen, target_addrlen)) {
 | 
			
		||||
            ret = -TARGET_EFAULT;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user