From facd0e97737a41b0bed072a95dcc3eb863c7667f Mon Sep 17 00:00:00 2001 From: Peng Hao Date: Sat, 15 Jul 2017 22:14:21 +0800 Subject: 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 Signed-off-by: Wang Yechao Message-id: 1500128061-20849-1-git-send-email-peng.hao2@zte.com.cn Signed-off-by: Gerd Hoffmann --- audio/rate_template.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/audio/rate_template.h b/audio/rate_template.h index bd4b1c7685..6e93588877 100644 --- a/audio/rate_template.h +++ b/audio/rate_template.h @@ -71,6 +71,12 @@ void NAME (void *opaque, struct st_sample *ibuf, struct st_sample *obuf, while (rate->ipos <= (rate->opos >> 32)) { ilast = *ibuf++; 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 */ if (ibuf >= iend) { goto the_end; -- cgit v1.2.1