From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: Re: [PATCH 3/5] example_ip_pipeline: fix sizeof() on memcpy Date: Wed, 9 Sep 2015 11:47:30 -0700 Message-ID: <20150909114730.200405c0@urahara> References: <1441072746-29174-1-git-send-email-stephen@networkplumber.org> <1441072746-29174-4-git-send-email-stephen@networkplumber.org> <3EB4FA525960D640B5BDFFD6A3D89126478B9547@IRSMSX108.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: "dev@dpdk.org" To: "Dumitrescu, Cristian" Return-path: Received: from mail-pa0-f52.google.com (mail-pa0-f52.google.com [209.85.220.52]) by dpdk.org (Postfix) with ESMTP id BE0878D35 for ; Wed, 9 Sep 2015 20:47:20 +0200 (CEST) Received: by padhy16 with SMTP id hy16so17920549pad.1 for ; Wed, 09 Sep 2015 11:47:20 -0700 (PDT) In-Reply-To: <3EB4FA525960D640B5BDFFD6A3D89126478B9547@IRSMSX108.ger.corp.intel.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, 9 Sep 2015 18:25:53 +0000 "Dumitrescu, Cristian" wrote: > > diff --git a/examples/ip_pipeline/init.c b/examples/ip_pipeline/init.c > > index 3f9c68d..75e3767 100644 > > --- a/examples/ip_pipeline/init.c > > +++ b/examples/ip_pipeline/init.c > > @@ -1325,7 +1325,7 @@ app_pipeline_type_cmd_push(struct app_params > > *app, > > /* Push pipeline commands into the application */ > > memcpy(&app->cmds[app->n_cmds], > > cmds, > > - n_cmds * sizeof(cmdline_parse_ctx_t *)); > > + n_cmds * sizeof(cmdline_parse_ctx_t)); > > Actually no, as we are both the destination and the source of memcpy are array of pointers. > > The source is a pipeline type, which is a static global data structure, so no issues with the life time of the data pointed to by the pointers. In order to make tools happy, shouldn't the source and target be pointers to array of pointers. In the current code &app->cmd[app->n_cmds] is type cmdline_parse_ctx_t * cmds is type cmdline_parse_ctx_t * And type cmdline_parse_ctx_t is already a pointer. Copying a set of pointers to pointers vs set of pointers will be the same since both are the same size, but static checking tools see the problem. This is why kernel developers particularly despise typedefs which hide pointers like this one.