[PATCH] media: dvb_ringbuffer: Fix bug in DVB's ringbuffer logic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Properly account for negative values when computing the consumed
value for DVB ringbuffers, by adding the size of the ring-buffer.
The modulus is unsigned so no out of bounds is possible, but
dvb_ringbuffer_pkt_next() may fail for CA's at least when the
default buffer size of 65535 bytes is used.

The current logic only works for buffer sizes that are power of two.

Signed-off-by: Yong Su Yoo <yongsuyoo0215@xxxxxxxxx>
Signed-off-by: Hans Petter Selasky <hps@xxxxxxxxxxx>
---
 drivers/media/dvb-core/dvb_ringbuffer.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/media/dvb-core/dvb_ringbuffer.c b/drivers/media/dvb-core/dvb_ringbuffer.c
index d1d471af0636..7d4558de8e83 100644
--- a/drivers/media/dvb-core/dvb_ringbuffer.c
+++ b/drivers/media/dvb-core/dvb_ringbuffer.c
@@ -335,7 +335,9 @@ ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t*
 		idx = (idx + curpktlen + DVB_RINGBUFFER_PKTHDRSIZE) % rbuf->size;
 	}

-	consumed = (idx - rbuf->pread) % rbuf->size;
+	consumed = (idx - rbuf->pread);
+	if (consumed < 0)
+		consumed += rbuf->size;

while((dvb_ringbuffer_avail(rbuf) - consumed) > DVB_RINGBUFFER_PKTHDRSIZE) {

--
2.37.3



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux