| From 4028bccb003cf67e46632dee7f97ddc5d7b6e685 Mon Sep 17 00:00:00 2001 |
| From: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> |
| Date: Wed, 19 Jan 2022 04:28:09 -0500 |
| Subject: IB/rdmavt: Validate remote_addr during loopback atomic tests |
| |
| From: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> |
| |
| commit 4028bccb003cf67e46632dee7f97ddc5d7b6e685 upstream. |
| |
| The rdma-core test suite sends an unaligned remote address and expects a |
| failure. |
| |
| ERROR: test_atomic_non_aligned_addr (tests.test_atomic.AtomicTest) |
| |
| The qib/hfi1 rc handling validates properly, but the test has the client |
| and server on the same system. |
| |
| The loopback of these operations is a distinct code path. |
| |
| Fix by syntaxing the proposed remote address in the loopback code path. |
| |
| Fixes: 15703461533a ("IB/{hfi1, qib, rdmavt}: Move ruc_loopback to rdmavt") |
| Link: https://lore.kernel.org/r/1642584489-141005-1-git-send-email-mike.marciniszyn@cornelisnetworks.com |
| Reviewed-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> |
| Signed-off-by: Mike Marciniszyn <mike.marciniszyn@cornelisnetworks.com> |
| Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/infiniband/sw/rdmavt/qp.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/infiniband/sw/rdmavt/qp.c |
| +++ b/drivers/infiniband/sw/rdmavt/qp.c |
| @@ -3124,6 +3124,8 @@ do_write: |
| case IB_WR_ATOMIC_FETCH_AND_ADD: |
| if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC))) |
| goto inv_err; |
| + if (unlikely(wqe->atomic_wr.remote_addr & (sizeof(u64) - 1))) |
| + goto inv_err; |
| if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64), |
| wqe->atomic_wr.remote_addr, |
| wqe->atomic_wr.rkey, |