DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Burakov, Anatoly" <anatoly.burakov@intel.com>
To: Li Han <han.li1@zte.com.cn>, reshma.pattan@intel.com
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v3] app/proc-info: fix port mask parse issue
Date: Fri, 16 Nov 2018 10:35:35 +0000
Message-ID: <6e90f28c-b84d-29fa-e152-c9a81e3bd0d3@intel.com> (raw)
In-Reply-To: <3202c296-0bbf-1832-4552-bff912c93e06@intel.com>

On 16-Nov-18 10:15 AM, Burakov, Anatoly wrote:
> On 07-Nov-18 6:10 AM, Li Han wrote:
>> parse_portmask return type is int,but global variable
>> "enabled_port_mask" type is uint32_t.so in proc_info_parse_args
>> function,when parse_portmask return -1,"enabled_port_mask" will
>> get a huge value and "if (enabled_port_mask == 0)" will never happen.
>>
>> Fixes: 22561383ea17 ("app: replace dump_cfg by proc_info")
>> Signed-off-by: Li Han <han.li1@zte.com.cn>
>>
>> ---
>> v3:
>> *fix commit meassges issue
>> v2:
>> *fix typecast issue
>> ---
>>   app/proc-info/main.c | 9 +++------
>>   1 file changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/app/proc-info/main.c b/app/proc-info/main.c
>> index c20effa..650d599 100644
>> --- a/app/proc-info/main.c
>> +++ b/app/proc-info/main.c
>> @@ -37,7 +37,7 @@
>>   #define MAX_STRING_LEN 256
>>   /**< mask of enabled ports */
>> -static uint32_t enabled_port_mask;
>> +static uint64_t enabled_port_mask;
>>   /**< Enable stats. */
>>   static uint32_t enable_stats;
>>   /**< Enable xstats. */
>> @@ -90,7 +90,7 @@
>>   /*
>>    * Parse the portmask provided at run time.
>>    */
>> -static int
>> +static unsigned long
>>   parse_portmask(const char *portmask)
>>   {
>>       char *end = NULL;
>> @@ -103,12 +103,9 @@
>>       if ((portmask[0] == '\0') || (end == NULL) || (*end != '\0') ||
>>           (errno != 0)) {
>>           printf("%s ERROR parsing the port mask\n", __func__);
>> -        return -1;
>> +        return 0;
>>       }
>> -    if (pm == 0)
>> -        return -1;
>> -
>>       return pm;
>>   }
>>
> 
> Hi,
> 
> This fix appears wrong. If you're making the value uint64_t, you cannot 
> encode errors in the value. So, it's better to leave the return type as 
> int, return 0 or -1 on success/error, and store the parsed result in a 
> pointer passed to the function instead. Something like this:
> 
> static int
> parse_portmask(const char *portmask, uint64_t *mask)
> {
> ...
>      if (pm == 0)
>      return -1;
>      *mask = pm;
>      return 0;
> }
> 

Also, another thing to note. Unsigned long is 32-bit on 32-bit Linux, so 
if you're going to have uint64_t data, you should correct the parsing to 
use strtoull() instead.

-- 
Thanks,
Anatoly

      reply	other threads:[~2018-11-16 10:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-07  6:10 Li Han
2018-11-07  9:47 ` Pattan, Reshma
2018-11-14  3:10 ` Thomas Monjalon
2018-11-14  3:57   ` [dpdk-dev] 答复: " han.li1
2018-11-14 10:39   ` [dpdk-dev] " Burakov, Anatoly
2018-11-16 10:15 ` Burakov, Anatoly
2018-11-16 10:35   ` Burakov, Anatoly [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6e90f28c-b84d-29fa-e152-c9a81e3bd0d3@intel.com \
    --to=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=han.li1@zte.com.cn \
    --cc=reshma.pattan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git