From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Miller Subject: Re: [net-next PATCH] net: ptr_ring: otherwise safe empty checks can overrun array bounds Date: Tue, 02 Jan 2018 11:52:19 -0500 (EST) Message-ID: <20180102.115219.1101472320429215260.davem@davemloft.net> References: <20171228035024.14699.69453.stgit@john-Precision-Tower-5810> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: jakub.kicinski@netronome.com, mst@redhat.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, netdev@vger.kernel.org To: john.fastabend@gmail.com Return-path: Received: from shards.monkeyblade.net ([184.105.139.130]:49618 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750960AbeABQwV (ORCPT ); Tue, 2 Jan 2018 11:52:21 -0500 In-Reply-To: <20171228035024.14699.69453.stgit@john-Precision-Tower-5810> Sender: netdev-owner@vger.kernel.org List-ID: From: John Fastabend Date: Wed, 27 Dec 2017 19:50:25 -0800 > When running consumer and/or producer operations and empty checks in > parallel its possible to have the empty check run past the end of the > array. The scenario occurs when an empty check is run while > __ptr_ring_discard_one() is in progress. Specifically after the > consumer_head is incremented but before (consumer_head >= ring_size) > check is made and the consumer head is zeroe'd. > > To resolve this, without having to rework how consumer/producer ops > work on the array, simply add an extra dummy slot to the end of the > array. Even if we did a rework to avoid the extra slot it looks > like the normal case checks would suffer some so best to just > allocate an extra pointer. > > Reported-by: Jakub Kicinski > Fixes: c5ad119fb6c09 ("net: sched: pfifo_fast use skb_array") > Signed-off-by: John Fastabend Applied, thanks John.