netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Patch net] ptr_ring: wrap back ->producer in __ptr_ring_swap_queue()
@ 2018-12-30 20:43 Cong Wang
  2018-12-31  0:52 ` Michael S. Tsirkin
  2019-01-01 19:59 ` David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: Cong Wang @ 2018-12-30 20:43 UTC (permalink / raw)
  To: netdev; +Cc: Cong Wang, Michael S. Tsirkin, John Fastabend, Jason Wang

__ptr_ring_swap_queue() tries to move pointers from the old
ring to the new one, but it forgets to check if ->producer
is beyond the new size at the end of the operation. This leads
to an out-of-bound access in __ptr_ring_produce() as reported
by syzbot.

Reported-by: syzbot+8993c0fa96d57c399735@syzkaller.appspotmail.com
Fixes: 5d49de532002 ("ptr_ring: resize support")
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
---
 include/linux/ptr_ring.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/linux/ptr_ring.h b/include/linux/ptr_ring.h
index 6894976b54e3..186cd8e970c7 100644
--- a/include/linux/ptr_ring.h
+++ b/include/linux/ptr_ring.h
@@ -573,6 +573,8 @@ static inline void **__ptr_ring_swap_queue(struct ptr_ring *r, void **queue,
 		else if (destroy)
 			destroy(ptr);
 
+	if (producer >= size)
+		producer = 0;
 	__ptr_ring_set_size(r, size);
 	r->producer = producer;
 	r->consumer_head = 0;
-- 
2.19.2

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-01-01 19:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-30 20:43 [Patch net] ptr_ring: wrap back ->producer in __ptr_ring_swap_queue() Cong Wang
2018-12-31  0:52 ` Michael S. Tsirkin
2019-01-01 18:58   ` Cong Wang
2019-01-01 19:59 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).