[dpdk-dev] [PATCH] lib/cmdline: init parse result memeory

Olivier MATZ olivier.matz at 6wind.com
Thu Dec 7 15:48:03 CET 2017


On Wed, Nov 15, 2017 at 11:54:02PM +0800, Xueming Li wrote:
> Initialize binary result memory before parsing to avoid garbage in
> parsing result.
> 
> Signed-off-by: Xueming Li <xuemingl at mellanox.com>
> ---
>  lib/librte_cmdline/cmdline_parse.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/librte_cmdline/cmdline_parse.c
> index 3e12ee54f..9124758f1 100644
> --- a/lib/librte_cmdline/cmdline_parse.c
> +++ b/lib/librte_cmdline/cmdline_parse.c
> @@ -267,6 +267,8 @@ cmdline_parse(struct cmdline *cl, const char * buf)
>  	if (!cl || !buf)
>  		return CMDLINE_PARSE_BAD_ARGS;
>  
> +	memset(tmp_result.buf, 0, sizeof(tmp_result.buf));
> +
>  	ctx = cl->ctx;
>  
>  	/*


Did you see an issue (a bug or a crash) without the memset()?
Or is it to avoid filling unused fields in the parsed struct?

I'm not sure if your patch is enough: cmdline_parse() calls match_inst()
for each registered command. If a command partially matches (only the
first tokens), the buffer is modified. So the next one will start
with a dirty buffer.

I suggest to put the memset() in match_inst() instead. Something
like this:

	if (resbuf != NULL)
		memset(resbuf, 0, resbuf_size);


It will reset the buffer before using it.

Olivier


More information about the dev mailing list