From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Fastabend Subject: Re: [Patch net-next] net_sched: properly check for empty skb array on error path Date: Mon, 18 Dec 2017 20:54:37 -0800 Message-ID: <49139cdf-7919-e797-21a4-b154cee226ca@gmail.com> References: <20171218223426.4685-1-xiyou.wangcong@gmail.com> <11149665-47bb-ec52-fdf0-db7bfa67152e@gmail.com> <4caae5f5-63e2-65c8-522e-0dfe736a7738@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: Linux Kernel Network Developers To: Cong Wang Return-path: Received: from mail-pg0-f66.google.com ([74.125.83.66]:43292 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934519AbdLSEyr (ORCPT ); Mon, 18 Dec 2017 23:54:47 -0500 Received: by mail-pg0-f66.google.com with SMTP id b18so10107394pgv.10 for ; Mon, 18 Dec 2017 20:54:47 -0800 (PST) In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 12/18/2017 08:31 PM, Cong Wang wrote: > On Mon, Dec 18, 2017 at 7:58 PM, John Fastabend > wrote: >> On 12/18/2017 06:20 PM, Cong Wang wrote: >>> On Mon, Dec 18, 2017 at 5:25 PM, John Fastabend >>> wrote: >>>> On 12/18/2017 02:34 PM, Cong Wang wrote: >>>>> First, the check of &q->ring.queue against NULL is wrong, it >>>>> is always false. We should check the value rather than the address. >>>>> >>>> >>>> Thanks. >>>> >>>>> Secondly, we need the same check in pfifo_fast_reset() too, >>>>> as both ->reset() and ->destroy() are called in qdisc_destroy(). >>>>> >>>> >>>> not that it hurts to have the check here, but if init fails >>>> in qdisc_create it seems only ->destroy() is called without >>>> a ->reset(). >>>> >>>> Is there another path for init() to fail that I'm missing. >>> >>> Pretty sure ->reset() is called in qdisc_destroy() and also before >>> ->destroy(): >>> >> >> Except, the failed init path does not call qdisc_destroy. >> >> static struct Qdisc *qdisc_create(struct net_device *dev, >> [...] >> >> if (ops->init) { >> err = ops->init(sch, tca[TCA_OPTIONS]); >> if (err != 0) >> goto err_out5; >> } >> [...] >> >> err_out5: >> /* ops->init() failed, we call ->destroy() like qdisc_create_dflt() */ >> if (ops->destroy) >> ops->destroy(sch); > > Didn't I say qdisc_destroy() rather than ->destroy()? :-) > Yep, thanks for the fix. Acked-by: John Fastabend