diff --git a/sys/dev/mlx5/mlx5_core/mlx5_cmd.c b/sys/dev/mlx5/mlx5_core/mlx5_cmd.c --- a/sys/dev/mlx5/mlx5_core/mlx5_cmd.c +++ b/sys/dev/mlx5/mlx5_core/mlx5_cmd.c @@ -1113,11 +1113,16 @@ block = mlx5_fwp_get_virt(msg, i * MLX5_CMD_MBOX_SIZE); - memset(block, 0, MLX5_CMD_MBOX_SIZE); - if (i != (n - 1)) { + memset(block, 0, MLX5_CMD_MBOX_SIZE); + u64 dma = mlx5_fwp_get_dma(msg, (i + 1) * MLX5_CMD_MBOX_SIZE); block->next = cpu_to_be64(dma); + } else { + /* Zero the rest of the page to satisfy KMSAN. */ + memset(block, 0, MLX5_ADAPTER_PAGE_SIZE - + (i % MLX5_NUM_CMDS_IN_ADAPTER_PAGE) * + MLX5_CMD_MBOX_SIZE); } block->block_num = cpu_to_be32(i); } @@ -1508,6 +1513,7 @@ } cmd->dma = mlx5_fwp_get_dma(cmd->cmd_page, 0); cmd->cmd_buf = mlx5_fwp_get_virt(cmd->cmd_page, 0); + memset(cmd->cmd_buf, 0, MLX5_ADAPTER_PAGE_SIZE); return (0); failure_alloc_page: