> -----Original Message----- > From: Alexander Kozyrev <akozy...@mellanox.com> > Sent: Thursday, May 14, 2020 18:11 > To: Slava Ovsiienko <viachesl...@mellanox.com>; dev@dpdk.org > Cc: Matan Azrad <ma...@mellanox.com>; Raslan Darawsheh > <rasl...@mellanox.com>; step...@networkplumber.org; sta...@dpdk.org > Subject: RE: [PATCH v2] common/mlx5: fix bogus assert > > These asserts seem redundant for me. Don't you think? > EINVAL is returned, why bother to assert the same condition? To stop the wrong conditions evolving on debug ?
> > Regards, > Alex > > > -----Original Message----- > > From: Viacheslav Ovsiienko <viachesl...@mellanox.com> > > Sent: Thursday, May 14, 2020 3:09 > > To: dev@dpdk.org > > Cc: Matan Azrad <ma...@mellanox.com>; Raslan Darawsheh > > <rasl...@mellanox.com>; step...@networkplumber.org; Alexander > Kozyrev > > <akozy...@mellanox.com>; sta...@dpdk.org > > Subject: [PATCH v2] common/mlx5: fix bogus assert > > > > The MLX5 device supports up to MLX5_MAX_MAC_ADDRESSES (256) MAC > > addresses. > > The code flushes all MAC devices. > > > > If DPDK is compiled with MLX5_DEBUG this would an assert. > > PANIC in mlx5_nl_mac_addr_flush(): > > line 775 assert "(size_t)(i) < sizeof(mac_own) * 8" failed > > > > The root cause is that mac_own is a pointer and is being used as a bitmap > array. > > The sizeof(mac_own) would therefore be 64 but the number of entries to > > be flushed would be 256. > > > > There is a whole set of asserts in MLX5 netlink code with the same > > bug; that should just be changed into proper error checks. > > > > Fixes: 8e46d4e18f09 ("common/mlx5: improve assert control") > > Cc: akozy...@mellanox.com > > Cc: sta...@dpdk.org > > > > Signed-off-by: Stephen Hemminger <step...@networkplumber.org> > > Signed-off-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> > > > > --- > > v2: fix asserts > > v1: > > > https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fpatch > > es.d > pdk.org%2Fpatch%2F67453%2F&data=02%7C01%7Cakozyrev%40mella > nox > > > .com%7C4f8e2cb5aacd4a33e22a08d7f7d5c7c4%7Ca652971c7d2e4d9ba6a4 > d14 > > > 9256f461b%7C0%7C0%7C637250369858023357&sdata=ZI7CTCQDnnm > r6n > > pYXTOxOf4%2BBktSgmE%2F3rC4NG3QXxc%3D&reserved=0 > > --- > > drivers/common/mlx5/mlx5_nl.c | 14 +++++++++++--- > > 1 file changed, 11 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/common/mlx5/mlx5_nl.c > > b/drivers/common/mlx5/mlx5_nl.c index c144223..65efcd3 100644 > > --- a/drivers/common/mlx5/mlx5_nl.c > > +++ b/drivers/common/mlx5/mlx5_nl.c > > @@ -671,7 +671,10 @@ struct mlx5_nl_ifindex_data { > > > > ret = mlx5_nl_mac_addr_modify(nlsk_fd, iface_idx, mac, 1); > > if (!ret) { > > - MLX5_ASSERT((size_t)(index) < sizeof(mac_own) * > CHAR_BIT); > > + MLX5_ASSERT(index < MLX5_MAX_MAC_ADDRESSES); > > + if (index >= MLX5_MAX_MAC_ADDRESSES) > > + return -EINVAL; > > + > > BITFIELD_SET(mac_own, index); > > } > > if (ret == -EEXIST) > > @@ -700,7 +703,10 @@ struct mlx5_nl_ifindex_data { > > mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx, uint64_t > > *mac_own, > > struct rte_ether_addr *mac, uint32_t index) { > > - MLX5_ASSERT((size_t)(index) < sizeof(mac_own) * CHAR_BIT); > > + MLX5_ASSERT(index < MLX5_MAX_MAC_ADDRESSES); > > + if (index >= MLX5_MAX_MAC_ADDRESSES) > > + return -EINVAL; > > + > > BITFIELD_RESET(mac_own, index); > > return mlx5_nl_mac_addr_modify(nlsk_fd, iface_idx, mac, 0); } @@ > - > > 769,10 +775,12 @@ struct mlx5_nl_ifindex_data { { > > int i; > > > > + if (n <= 0 || n >= MLX5_MAX_MAC_ADDRESSES) > > + return; > > + > > for (i = n - 1; i >= 0; --i) { > > struct rte_ether_addr *m = &mac_addrs[i]; > > > > - MLX5_ASSERT((size_t)(i) < sizeof(mac_own) * CHAR_BIT); > > if (BITFIELD_ISSET(mac_own, i)) > > mlx5_nl_mac_addr_remove(nlsk_fd, iface_idx, > mac_own, m, > > i); > > -- > > 1.8.3.1