Commit 41d902cb authored by Jason Gunthorpe's avatar Jason Gunthorpe

RDMA/mlx5: Fix definition of mlx5_ib_create_qp_resp

This structure is pushed down the ex and the non-ex path, so it needs to be
aligned to 8 bytes to go through ex without implicit padding.

Old user space will provide 4 bytes of resp on !ex and 8 bytes on ex, so
take the approach of just copying the minimum length.

New user space will consistently provide 8 bytes in both cases.
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 689a8e31
...@@ -880,7 +880,7 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd, ...@@ -880,7 +880,7 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd,
goto err_free; goto err_free;
} }
err = ib_copy_to_udata(udata, resp, sizeof(*resp)); err = ib_copy_to_udata(udata, resp, min(udata->outlen, sizeof(*resp)));
if (err) { if (err) {
mlx5_ib_dbg(dev, "copy failed\n"); mlx5_ib_dbg(dev, "copy failed\n");
goto err_unmap; goto err_unmap;
...@@ -1468,7 +1468,7 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, ...@@ -1468,7 +1468,7 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
err = ib_copy_to_udata(udata, &resp, min_resp_len); err = ib_copy_to_udata(udata, &resp, min(udata->outlen, sizeof(resp)));
if (err) { if (err) {
mlx5_ib_dbg(dev, "copy failed\n"); mlx5_ib_dbg(dev, "copy failed\n");
return -EINVAL; return -EINVAL;
......
...@@ -335,6 +335,7 @@ struct mlx5_ib_create_qp_rss { ...@@ -335,6 +335,7 @@ struct mlx5_ib_create_qp_rss {
struct mlx5_ib_create_qp_resp { struct mlx5_ib_create_qp_resp {
__u32 bfreg_index; __u32 bfreg_index;
__u32 reserved;
}; };
struct mlx5_ib_alloc_mw { struct mlx5_ib_alloc_mw {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment