|  | @@ -415,7 +415,7 @@ static int tftp_rx_oack ( struct tftp_request *tftp, void *buf, size_t len ) {
 | 
		
	
		
			
			| 415 | 415 |  static int tftp_rx_data ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 416 | 416 |  			  struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 417 | 417 |  	struct tftp_data *data = iobuf->data;
 | 
		
	
		
			
			| 418 |  | -	unsigned int block;
 | 
		
	
		
			
			|  | 418 | +	int block;
 | 
		
	
		
			
			| 419 | 419 |  	size_t data_len;
 | 
		
	
		
			
			| 420 | 420 |  	int rc;
 | 
		
	
		
			
			| 421 | 421 |  
 | 
		
	
	
		
			
			|  | @@ -432,6 +432,14 @@ static int tftp_rx_data ( struct tftp_request *tftp,
 | 
		
	
		
			
			| 432 | 432 |  	iob_pull ( iobuf, sizeof ( *data ) );
 | 
		
	
		
			
			| 433 | 433 |  	data_len = iob_len ( iobuf );
 | 
		
	
		
			
			| 434 | 434 |  
 | 
		
	
		
			
			|  | 435 | +	/* Check for correct block */
 | 
		
	
		
			
			|  | 436 | +	if ( block != ( tftp->state + 1 ) ) {
 | 
		
	
		
			
			|  | 437 | +		DBGC ( tftp, "TFTP %p received out-of-order block %d "
 | 
		
	
		
			
			|  | 438 | +		       "(expecting %d)\n", tftp, block, ( tftp->state + 1 ) );
 | 
		
	
		
			
			|  | 439 | +		free_iob ( iobuf );
 | 
		
	
		
			
			|  | 440 | +		return 0;
 | 
		
	
		
			
			|  | 441 | +	}
 | 
		
	
		
			
			|  | 442 | +
 | 
		
	
		
			
			| 435 | 443 |  	/* Deliver data */
 | 
		
	
		
			
			| 436 | 444 |  	if ( ( rc = xfer_deliver_iob ( &tftp->xfer, iobuf ) ) != 0 ) {
 | 
		
	
		
			
			| 437 | 445 |  		DBGC ( tftp, "TFTP %p could not deliver data: %s\n",
 |