mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	Fix fd range for select on Windows
Fix mbedtls_net_poll() and mbedtls_net_recv_timeout() often failing with MBEDTLS_ERR_NET_POLL_FAILED on Windows: they were testing that the file descriptor is in range for fd_set, but on Windows socket descriptors are not limited to a small range. Fixes #4465. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
		
							parent
							
								
									05360005e3
								
							
						
					
					
						commit
						a5dd7bded8
					
				
							
								
								
									
										4
									
								
								ChangeLog.d/winsock.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								ChangeLog.d/winsock.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					Bugfix
 | 
				
			||||||
 | 
					   * Fix mbedtls_net_poll() and mbedtls_net_recv_timeout() often failing with
 | 
				
			||||||
 | 
					     MBEDTLS_ERR_NET_POLL_FAILED on Windows. Fixes #4465.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -145,12 +145,17 @@ static int check_fd( int fd, int for_select )
 | 
				
			|||||||
    if( fd < 0 )
 | 
					    if( fd < 0 )
 | 
				
			||||||
        return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
 | 
					        return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \
 | 
				
			||||||
 | 
					    !defined(EFI32)
 | 
				
			||||||
 | 
					    (void) for_select;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
    /* A limitation of select() is that it only works with file descriptors
 | 
					    /* A limitation of select() is that it only works with file descriptors
 | 
				
			||||||
     * that are strictly less than FD_SETSIZE. This is a limitation of the
 | 
					     * that are strictly less than FD_SETSIZE. This is a limitation of the
 | 
				
			||||||
     * fd_set type. Error out early, because attempting to call FD_SET on a
 | 
					     * fd_set type. Error out early, because attempting to call FD_SET on a
 | 
				
			||||||
     * large file descriptor is a buffer overflow on typical platforms. */
 | 
					     * large file descriptor is a buffer overflow on typical platforms. */
 | 
				
			||||||
    if( for_select && fd >= FD_SETSIZE )
 | 
					    if( for_select && fd >= FD_SETSIZE )
 | 
				
			||||||
        return( MBEDTLS_ERR_NET_POLL_FAILED );
 | 
					        return( MBEDTLS_ERR_NET_POLL_FAILED );
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return( 0 );
 | 
					    return( 0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user