Commit 4a082260 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'mlx5-fixes-2023-07-26' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux

Saeed Mahameed says:

====================
mlx5 fixes 2023-07-26

This series provides bug fixes to mlx5 driver.

* tag 'mlx5-fixes-2023-07-26' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux:
  net/mlx5: Unregister devlink params in case interface is down
  net/mlx5: DR, Fix peer domain namespace setting
  net/mlx5: fs_chains: Fix ft prio if ignore_flow_level is not supported
  net/mlx5e: kTLS, Fix protection domain in use syndrome when devlink reload
  net/mlx5: Bridge, set debugfs access right to root-only
  net/mlx5e: xsk: Fix crash on regular rq reactivation
  net/mlx5e: xsk: Fix invalid buffer access for legacy rq
  net/mlx5e: Move representor neigh cleanup to profile cleanup_tx
  net/mlx5e: Fix crash moving to switchdev mode when ntuple offload is set
  net/mlx5e: Don't hold encap tbl lock if there is no encap action
  net/mlx5: Honor user input for migratable port fn attr
  net/mlx5e: fix return value check in mlx5e_ipsec_remove_trailer()
  net/mlx5: fix potential memory leak in mlx5e_init_rep_rx
  net/mlx5: DR, fix memory leak in mlx5dr_cmd_create_reformat_ctx
  net/mlx5e: fix double free in macsec_fs_tx_create_crypto_table_groups
====================

Link: https://lore.kernel.org/r/20230726213206.47022-1-saeed@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents dadc5b86 53d737df
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -1030,9 +1030,6 @@ int mlx5e_tc_tun_encap_dests_set(struct mlx5e_priv *priv,
	int out_index;
	int err = 0;

	if (!mlx5e_is_eswitch_flow(flow))
		return 0;

	parse_attr = attr->parse_attr;
	esw_attr = attr->esw_attr;
	*vf_tun = false;
+4 −1
Original line number Diff line number Diff line
@@ -323,8 +323,11 @@ struct sk_buff *mlx5e_xsk_skb_from_cqe_linear(struct mlx5e_rq *rq,
	net_prefetch(mxbuf->xdp.data);

	prog = rcu_dereference(rq->xdp_prog);
	if (likely(prog && mlx5e_xdp_handle(rq, prog, mxbuf)))
	if (likely(prog && mlx5e_xdp_handle(rq, prog, mxbuf))) {
		if (likely(__test_and_clear_bit(MLX5E_RQ_FLAG_XDP_XMIT, rq->flags)))
			wi->flags |= BIT(MLX5E_WQE_FRAG_SKIP_RELEASE);
		return NULL; /* page/packet was consumed by XDP */
	}

	/* XDP_PASS: copy the data from the UMEM to a new SKB. The frame reuse
	 * will be handled by mlx5e_free_rx_wqe.
+3 −1
Original line number Diff line number Diff line
@@ -58,7 +58,9 @@ static int mlx5e_ipsec_remove_trailer(struct sk_buff *skb, struct xfrm_state *x)

	trailer_len = alen + plen + 2;

	pskb_trim(skb, skb->len - trailer_len);
	ret = pskb_trim(skb, skb->len - trailer_len);
	if (unlikely(ret))
		return ret;
	if (skb->protocol == htons(ETH_P_IP)) {
		ipv4hdr->tot_len = htons(ntohs(ipv4hdr->tot_len) - trailer_len);
		ip_send_check(ipv4hdr);
+0 −8
Original line number Diff line number Diff line
@@ -188,7 +188,6 @@ static void mlx5e_tls_debugfs_init(struct mlx5e_tls *tls,

int mlx5e_ktls_init(struct mlx5e_priv *priv)
{
	struct mlx5_crypto_dek_pool *dek_pool;
	struct mlx5e_tls *tls;

	if (!mlx5e_is_ktls_device(priv->mdev))
@@ -199,12 +198,6 @@ int mlx5e_ktls_init(struct mlx5e_priv *priv)
		return -ENOMEM;
	tls->mdev = priv->mdev;

	dek_pool = mlx5_crypto_dek_pool_create(priv->mdev, MLX5_ACCEL_OBJ_TLS_KEY);
	if (IS_ERR(dek_pool)) {
		kfree(tls);
		return PTR_ERR(dek_pool);
	}
	tls->dek_pool = dek_pool;
	priv->tls = tls;

	mlx5e_tls_debugfs_init(tls, priv->dfs_root);
@@ -222,7 +215,6 @@ void mlx5e_ktls_cleanup(struct mlx5e_priv *priv)
	debugfs_remove_recursive(tls->debugfs.dfs);
	tls->debugfs.dfs = NULL;

	mlx5_crypto_dek_pool_destroy(tls->dek_pool);
	kfree(priv->tls);
	priv->tls = NULL;
}
+26 −3
Original line number Diff line number Diff line
@@ -908,28 +908,51 @@ static void mlx5e_tls_tx_debugfs_init(struct mlx5e_tls *tls,

int mlx5e_ktls_init_tx(struct mlx5e_priv *priv)
{
	struct mlx5_crypto_dek_pool *dek_pool;
	struct mlx5e_tls *tls = priv->tls;
	int err;

	if (!mlx5e_is_ktls_device(priv->mdev))
		return 0;

	/* DEK pool could be used by either or both of TX and RX. But we have to
	 * put the creation here to avoid syndrome when doing devlink reload.
	 */
	dek_pool = mlx5_crypto_dek_pool_create(priv->mdev, MLX5_ACCEL_OBJ_TLS_KEY);
	if (IS_ERR(dek_pool))
		return PTR_ERR(dek_pool);
	tls->dek_pool = dek_pool;

	if (!mlx5e_is_ktls_tx(priv->mdev))
		return 0;

	priv->tls->tx_pool = mlx5e_tls_tx_pool_init(priv->mdev, &priv->tls->sw_stats);
	if (!priv->tls->tx_pool)
		return -ENOMEM;
	if (!priv->tls->tx_pool) {
		err = -ENOMEM;
		goto err_tx_pool_init;
	}

	mlx5e_tls_tx_debugfs_init(tls, tls->debugfs.dfs);

	return 0;

err_tx_pool_init:
	mlx5_crypto_dek_pool_destroy(dek_pool);
	return err;
}

void mlx5e_ktls_cleanup_tx(struct mlx5e_priv *priv)
{
	if (!mlx5e_is_ktls_tx(priv->mdev))
		return;
		goto dek_pool_destroy;

	debugfs_remove_recursive(priv->tls->debugfs.dfs_tx);
	priv->tls->debugfs.dfs_tx = NULL;

	mlx5e_tls_tx_pool_cleanup(priv->tls->tx_pool);
	priv->tls->tx_pool = NULL;

dek_pool_destroy:
	if (mlx5e_is_ktls_device(priv->mdev))
		mlx5_crypto_dek_pool_destroy(priv->tls->dek_pool);
}
Loading