On 2026-09-18 at 02:44:10, Kees Cook ([email protected]) wrote:
> From: Kees Cook <[email protected]>
>
> In preparation for making the devm_kmalloc family of allocators type
> aware, we need to make sure that the returned type from the allocation
> matches the type of the variable being assigned. (Before, the allocator
> would always return "void *", which can be implicitly cast to any
> pointer type.)
>
> This is allocating room for a copy of ikpu_action_entries, which is an
> array of struct npc_kpu_profile_action, but it asked for a single object
> the size of the whole array, which would make the allocation type a
> pointer to the array rather than the "struct npc_kpu_profile_action *"
> being assigned. Allocate ARRAY_SIZE-many entries instead. The resulting
> allocation size is the same.
>
> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c
> @@ -1959,8 +1959,9 @@ static int npc_apply_custom_kpu_from_fs(struct rvu *rvu,
> fw = rvu->kpu_fwdata;
>
> /* Binary blob contains ikpu actions entries at start of data[0] */
> - profile->ikpu2 = devm_kcalloc(rvu->dev, 1,
> - sizeof(ikpu_action_entries),
> + profile->ikpu2 = devm_kcalloc(rvu->dev,
> + ARRAY_SIZE(ikpu_action_entries),
> + sizeof(*profile->ikpu2),
> GFP_KERNEL);
Reviewed-by: Ratheesh Kannoth <[email protected]>