All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ding Tianhong <dingtianhong@huawei.com>
To: Michal Kubecek <mkubecek@suse.cz>,
	Stephen Hemminger <stephen@networkplumber.org>
Cc: <netdev@vger.kernel.org>
Subject: Re: [PATCH iproute2 net-next-for-3.13] iplink_bond: fix parameter value matching
Date: Fri, 7 Feb 2014 10:45:03 +0800	[thread overview]
Message-ID: <52F448AF.3060604@huawei.com> (raw)
In-Reply-To: <20140206125901.A95E2E5A97@unicorn.suse.cz>

On 2014/2/6 20:59, Michal Kubecek wrote:
> Lookup function get_index() compares argument with table entries
> only up to the length of the table entry so that if an entry
> with lower index is a substring of a later one, earlier entry is
> used even if the argument is equal to the other. For example,
> 
>   ip link set bond0 type bond xmit_hash_policy layer2+3
> 
> sets xmit_hash_policy to 0 (layer2) as this is found before
> "layer2+3" can be checked.
> 
> I believe the reason for using strncmp() rather than simple
> strcmp() was to allow abbreviations which means maximum length
> for comparison should be length of the string looked up.
> However, this would cause a problem if shorter value follows
> longer one and shorter one is entered (there is no such case now
> but it might happen in the future). So let's try to find an
> exact match first and only if none is found, do a second pass
> with checking for abbreviated values.
> 
> Fixes: 63d127b0 ("iproute2: finish support for bonding attributes")
> Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
> ---
>  ip/iplink_bond.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/ip/iplink_bond.c b/ip/iplink_bond.c
> index f22151e..4cd6843 100644
> --- a/ip/iplink_bond.c
> +++ b/ip/iplink_bond.c
> @@ -105,8 +105,14 @@ static int get_index(const char **tbl, char *name)
>  			if (i == index)
>  				return i;
>  
> +	/* first check for an exact match */
>  	for (i = 0; tbl[i]; i++)
> -		if (strncmp(tbl[i], name, strlen(tbl[i])) == 0)
> +		if (strcmp(tbl[i], name) == 0)
> +			return i;
> +

Yes, I think strcmp is more better here.

> +	/* no exact match, try to interpret as an abbreviation */
> +	for (i = 0; tbl[i]; i++)
> +		if (strncmp(tbl[i], name, strlen(name)) == 0)
>  			return i;
>  
I don't think it is needed here, if no match, just return the result.
>  	return -1;
> 

  reply	other threads:[~2014-02-07  2:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-06 12:59 [PATCH iproute2 net-next-for-3.13] iplink_bond: fix parameter value matching Michal Kubecek
2014-02-07  2:45 ` Ding Tianhong [this message]
2014-02-13 16:31   ` [PATCH iproute2 v2] " Michal Kubecek
2014-02-17 19:00     ` Stephen Hemminger

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=52F448AF.3060604@huawei.com \
    --to=dingtianhong@huawei.com \
    --cc=mkubecek@suse.cz \
    --cc=netdev@vger.kernel.org \
    --cc=stephen@networkplumber.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.