From patchwork Wed Jul 25 11:24:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 43347 X-Patchwork-Delegate: shahafs@mellanox.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 212DB23D; Wed, 25 Jul 2018 13:24:53 +0200 (CEST) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by dpdk.org (Postfix) with ESMTP id 67DB6235 for ; Wed, 25 Jul 2018 13:24:51 +0200 (CEST) Received: by mail-wr1-f67.google.com with SMTP id g6-v6so7075658wrp.0 for ; Wed, 25 Jul 2018 04:24:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:mime-version:content-disposition; bh=DkQyK7aEv6+z1ISf2woqgXU2mxJ2x8K5YwLsflpIMaQ=; b=D2FAUdjI5iHbYl95w4U3QYlSow+MrzuobF9/CsSqgkleHX98Apf/iv4Bx7bDt8FpGY /ONk509Z7cHbHvyogMD6nc3cEGFBjT+hT86XMPfssjxpdfBqobirylLhyWV5UpJ0SvPV qUPYILUSZCEESS9mvt/joZJUJfpugwT5EVm5h02u0mqGKw5qqPAEdNudxNVtWnmnrRHK hICeELiFlgIOJuKjh6sVG1UOnHAvYEncyAcpi+VExMhgqj3bif6g63tiGoIYr5pdOY+L Po5yaKhtcrWyeVI4cGLRMayCujO0VYIT5XH8AStagHESa3cEacKTwpsehNzjuxlBVCJe V4gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=DkQyK7aEv6+z1ISf2woqgXU2mxJ2x8K5YwLsflpIMaQ=; b=pWevhRE2BeAiJwH0wDzkABYW6Qw+NiYLKhbzEvtZaqzMMZ0m93eFLqaTssCZqbkFwQ aKiLR2kiJy5qhkDXF7ZKnmv69Xd6AYOpW9fqVJgeqN77PWC91DpY/+j2OZxt0leiX54u iKpRZivQUgCHHNJiPXlCPLtKxfu/p+NGCKuruUSCDPbmi/StCxJmIE+yJNL0xRuZlZZ4 YuFQ/pn9VS22D57Qwi860w3bzwtqpdCmtWxvaoC1KoDTd+WC7YOsQh5VCF9vQQ9uHNcg Ys4zl1NrPyc6aD6zzBhoCZSrqBgGjbMsD5qb6ZLRpb9FM4Xvfqn8C2VozITwHgtxYvYc tcrg== X-Gm-Message-State: AOUpUlGroWnAdt8fVcqX+hWBBItG1oNMXgdsRp5zRMIKFL6QsftcVy1W CrMirQP+80bOEvwMCsBRf7/i6/siAWM99g== X-Google-Smtp-Source: AAOMgpeyH0BgPiTnfhCpIZYQS2Tp8/Emj/lFh6y05fN7Dlsu/jjwDcIW3XZczDN0r6yI+CoGSGuf1w== X-Received: by 2002:a5d:4f0d:: with SMTP id c13-v6mr9258281wru.114.1532517891197; Wed, 25 Jul 2018 04:24:51 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id u71-v6sm6375719wmd.12.2018.07.25.04.24.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Jul 2018 04:24:50 -0700 (PDT) Date: Wed, 25 Jul 2018 13:24:33 +0200 From: Adrien Mazarguil To: Shahaf Shuler Cc: dev@dpdk.org, Nelio Laranjeiro , stable@dpdk.org Message-ID: <20180725112249.11148-1-adrien.mazarguil@6wind.com> MIME-Version: 1.0 Content-Disposition: inline X-Mailer: git-send-email 2.11.0 Subject: [dpdk-dev] [PATCH] net/mlx5: fix invalid network interface index value X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Network interface indices being unsigned, an invalid index or error is normally expressed through a zero value (see if_nametoindex()). mlx5_ifindex() has a signed return type for negative values in case of error. Since mlx5_nl.c does not check for errors, these may be fed back as invalid interfaces indices to subsequent system calls. This usage would have been correct if mlx5_ifindex() returned a zero value instead. This patch makes mlx5_ifindex() unsigned for convenience. Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses") Cc: Nelio Laranjeiro Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro Acked-by: Yongseok Koh --- drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mlx5/mlx5_ethdev.c | 20 ++++++++------------ drivers/net/mlx5/mlx5_nl.c | 6 +++--- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index db8a5fa01..25345baea 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -243,7 +243,7 @@ int mlx5_getenv_int(const char *); int mlx5_get_master_ifname(const struct rte_eth_dev *dev, char (*ifname)[IF_NAMESIZE]); int mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[IF_NAMESIZE]); -int mlx5_ifindex(const struct rte_eth_dev *dev); +unsigned int mlx5_ifindex(const struct rte_eth_dev *dev); int mlx5_ifreq(const struct rte_eth_dev *dev, int req, struct ifreq *ifr, int master); int mlx5_get_mtu(struct rte_eth_dev *dev, uint16_t *mtu); diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 9cf2dc5f1..a1c1b50a6 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -245,24 +245,20 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[IF_NAMESIZE]) * Pointer to Ethernet device. * * @return - * Interface index on success, a negative errno value otherwise and - * rte_errno is set. + * Nonzero interface index on success, zero otherwise and rte_errno is set. */ -int +unsigned int mlx5_ifindex(const struct rte_eth_dev *dev) { char ifname[IF_NAMESIZE]; - unsigned int ret; + unsigned int ifindex; - ret = mlx5_get_ifname(dev, &ifname); - if (ret) - return ret; - ret = if_nametoindex(ifname); - if (ret == 0) { + if (mlx5_get_ifname(dev, &ifname)) + return 0; + ifindex = if_nametoindex(ifname); + if (!ifindex) rte_errno = errno; - return -rte_errno; - } - return ret; + return ifindex; } /** diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c index 008cd2c31..cc562dfc9 100644 --- a/drivers/net/mlx5/mlx5_nl.c +++ b/drivers/net/mlx5/mlx5_nl.c @@ -365,7 +365,7 @@ mlx5_nl_mac_addr_list(struct rte_eth_dev *dev, struct ether_addr (*mac)[], int *mac_n) { struct priv *priv = dev->data->dev_private; - int iface_idx = mlx5_ifindex(dev); + unsigned int iface_idx = mlx5_ifindex(dev); struct { struct nlmsghdr hdr; struct ifinfomsg ifm; @@ -424,7 +424,7 @@ mlx5_nl_mac_addr_modify(struct rte_eth_dev *dev, struct ether_addr *mac, int add) { struct priv *priv = dev->data->dev_private; - int iface_idx = mlx5_ifindex(dev); + unsigned int iface_idx = mlx5_ifindex(dev); struct { struct nlmsghdr hdr; struct ndmsg ndm; @@ -603,7 +603,7 @@ static int mlx5_nl_device_flags(struct rte_eth_dev *dev, uint32_t flags, int enable) { struct priv *priv = dev->data->dev_private; - int iface_idx = mlx5_ifindex(dev); + unsigned int iface_idx = mlx5_ifindex(dev); struct { struct nlmsghdr hdr; struct ifinfomsg ifi;