audio: st_rate_flow exist a infinite loop
If a voice recording equipment is opened for a long time(several days) in windows guest, rate->ipos will overflow and rate->opos will never have a chance to change. It will result to a infinite loop. Signed-off-by: Peng Hao <peng.hao2@zte.com.cn> Signed-off-by: Wang Yechao <wang.yechao255@zte.com.cn> Message-id: 1500128061-20849-1-git-send-email-peng.hao2@zte.com.cn Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									6e2c463343
								
							
						
					
					
						commit
						facd0e9773
					
				@ -71,6 +71,12 @@ void NAME (void *opaque, struct st_sample *ibuf, struct st_sample *obuf,
 | 
				
			|||||||
        while (rate->ipos <= (rate->opos >> 32)) {
 | 
					        while (rate->ipos <= (rate->opos >> 32)) {
 | 
				
			||||||
            ilast = *ibuf++;
 | 
					            ilast = *ibuf++;
 | 
				
			||||||
            rate->ipos++;
 | 
					            rate->ipos++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /* if ipos overflow, there is  a infinite loop */
 | 
				
			||||||
 | 
					            if (rate->ipos == 0xffffffff) {
 | 
				
			||||||
 | 
					                rate->ipos = 1;
 | 
				
			||||||
 | 
					                rate->opos = rate->opos & 0xffffffff;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            /* See if we finished the input buffer yet */
 | 
					            /* See if we finished the input buffer yet */
 | 
				
			||||||
            if (ibuf >= iend) {
 | 
					            if (ibuf >= iend) {
 | 
				
			||||||
                goto the_end;
 | 
					                goto the_end;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user