From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.tuxdriver.com (charlotte.tuxdriver.com [70.61.120.58]) by dpdk.org (Postfix) with ESMTP id 689C368BF for ; Thu, 18 Dec 2014 22:12:34 +0100 (CET) Received: from hmsreliant.think-freely.org ([2001:470:8:a08:7aac:c0ff:fec2:933b] helo=localhost) by smtp.tuxdriver.com with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.63) (envelope-from ) id 1Y1iN4-0001PC-O5; Thu, 18 Dec 2014 16:12:32 -0500 Date: Thu, 18 Dec 2014 16:12:29 -0500 From: Neil Horman To: Daniel Mrzyglod Message-ID: <20141218211229.GH18008@hmsreliant.think-freely.org> References: <1418895707-468-1-git-send-email-danielx.t.mrzyglod@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1418895707-468-1-git-send-email-danielx.t.mrzyglod@intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Score: -2.9 (--) X-Spam-Status: No Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH] test: fix missing NULL pointer checks X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Dec 2014 21:12:34 -0000 On Thu, Dec 18, 2014 at 09:41:47AM +0000, Daniel Mrzyglod wrote: > In test_sched, we are missing NULL pointer checks after calls to create the > mempool and to allocate an mbuf. Add in these checks using VERIFY macros. > > Signed-off-by: Daniel Mrzyglod > --- > app/test/test_sched.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/app/test/test_sched.c b/app/test/test_sched.c > index c957d80..9b6e037 100644 > --- a/app/test/test_sched.c > +++ b/app/test/test_sched.c > @@ -166,6 +166,7 @@ test_sched(void) > int err; > > mp = create_mempool(); > + VERIFY(mp != NULL,"Error create mempool\n"); > > port_param.socket = 0; > port_param.rate = (uint64_t) 10000 * 1000 * 1000 / 8; > @@ -184,6 +185,7 @@ test_sched(void) > > for (i = 0; i < 10; i++) { > in_mbufs[i] = rte_pktmbuf_alloc(mp); > + VERIFY(in_mbufs[i] != NULL, "Bad packet allocation"); > prepare_pkt(in_mbufs[i]); > } > > -- > 2.1.0 > > Looking at the VERIFY macro, its defined as: #define VERIFY(exp,fmt,args...) \ if (!(exp)) { \ printf(fmt, ##args); return -1; \ } Thats really bad practice, as it embodies a return into the VERIFY macro, creating hidden function exit points that the programmer can't clean up within. Every use of the VERIFY macro in test_sched causes the program to return without freeing any of the memory allocated in the function (not that the function is any good at cleaning up after itself anyway), but I would recommend that you modify the macro as such: #define VERIFY(exp, fmt, args...) \ if (!(exp)) { \ printf(fmt, ##args); \ 0;\ } else \ 1;\ } That way you can use the macro like this: if (VERIFY(in_mbufs[i] != NULL, "Bad packet allocation") { //Insert cleanup code here } Neil