]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mlxsw: Use size_mul() in call to struct_size()
authorGustavo A. R. Silva <gustavoars@kernel.org>
Fri, 15 Sep 2023 19:01:23 +0000 (13:01 -0600)
committerDavid S. Miller <davem@davemloft.net>
Mon, 18 Sep 2023 08:36:20 +0000 (09:36 +0100)
If, for any reason, the open-coded arithmetic causes a wraparound, the
protection that `struct_size()` adds against potential integer overflows
is defeated. Fix this by hardening call to `struct_size()` with `size_mul()`.

Fixes: 2285ec872d9d ("mlxsw: spectrum_acl_bloom_filter: use struct_size() in kzalloc()")
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_bloom_filter.c

index e2aced7ab4547688e05a4868094849b6e32b4a54..95f63fcf4ba1fa6ca22ab6e6f008cdaa72de4516 100644 (file)
@@ -496,7 +496,7 @@ mlxsw_sp_acl_bf_init(struct mlxsw_sp *mlxsw_sp, unsigned int num_erp_banks)
         * is 2^ACL_MAX_BF_LOG
         */
        bf_bank_size = 1 << MLXSW_CORE_RES_GET(mlxsw_sp->core, ACL_MAX_BF_LOG);
-       bf = kzalloc(struct_size(bf, refcnt, bf_bank_size * num_erp_banks),
+       bf = kzalloc(struct_size(bf, refcnt, size_mul(bf_bank_size, num_erp_banks)),
                     GFP_KERNEL);
        if (!bf)
                return ERR_PTR(-ENOMEM);