mlxsw: spectrum_cnt: Use flex_array_size() helper in memcpy()
authorGustavo A. R. Silva <gustavoars@kernel.org>
Wed, 29 Jul 2020 22:58:03 +0000 (17:58 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 31 Jul 2020 00:38:23 +0000 (17:38 -0700)
Make use of the flex_array_size() helper to calculate the size of a
flexible array member within an enclosing structure.

This helper offers defense-in-depth against potential integer
overflows, while at the same time makes it explicitly clear that
we are dealing witha flexible array member.

Also, remove unnecessary pointer identifier sub_pool.

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Tested-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.c

index 7974982..b65b93a 100644 (file)
@@ -121,7 +121,6 @@ int mlxsw_sp_counter_pool_init(struct mlxsw_sp *mlxsw_sp)
 {
        unsigned int sub_pools_count = ARRAY_SIZE(mlxsw_sp_counter_sub_pools);
        struct devlink *devlink = priv_to_devlink(mlxsw_sp->core);
-       struct mlxsw_sp_counter_sub_pool *sub_pool;
        struct mlxsw_sp_counter_pool *pool;
        unsigned int map_size;
        int err;
@@ -131,9 +130,9 @@ int mlxsw_sp_counter_pool_init(struct mlxsw_sp *mlxsw_sp)
        if (!pool)
                return -ENOMEM;
        mlxsw_sp->counter_pool = pool;
-       memcpy(pool->sub_pools, mlxsw_sp_counter_sub_pools,
-              sub_pools_count * sizeof(*sub_pool));
        pool->sub_pools_count = sub_pools_count;
+       memcpy(pool->sub_pools, mlxsw_sp_counter_sub_pools,
+              flex_array_size(pool, sub_pools, pool->sub_pools_count));
        spin_lock_init(&pool->counter_pool_lock);
        atomic_set(&pool->active_entries_count, 0);