Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 880505cf authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

RDMA/mlx5: Do not allow rereg of a ODP MR

This code is completely broken, the umem of a ODP MR simply cannot be
discarded without a lot more locking, nor can an ODP mkey be blithely
destroyed via destroy_mkey().

Fixes: 6aec21f6 ("IB/mlx5: Page faults handling infrastructure")
Link: https://lore.kernel.org/r/20191001153821.23621-2-jgg@ziepe.ca


Reviewed-by: default avatarArtemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 1cbe866c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1441,6 +1441,9 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
	if (!mr->umem)
		return -EINVAL;

	if (is_odp_mr(mr))
		return -EOPNOTSUPP;

	if (flags & IB_MR_REREG_TRANS) {
		addr = virt_addr;
		len = length;
@@ -1486,8 +1489,6 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
		}

		mr->allocated_from_cache = 0;
		if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING))
			mr->live = 1;
	} else {
		/*
		 * Send a UMR WQE
@@ -1516,7 +1517,6 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,

	set_mr_fields(dev, mr, npages, len, access_flags);

	update_odp_mr(mr);
	return 0;

err: