|
|
6698ac |
commit e2c3c3fefa26287dcce1e70634792cff47d775ff
|
|
|
6698ac |
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
|
|
|
6698ac |
Date: Mon Oct 16 10:24:21 2017 -0400
|
|
|
6698ac |
|
|
|
6698ac |
ibacm: Incorrect usage of BE byte order of MLID attach/detach_mcast()
|
|
|
6698ac |
|
|
|
6698ac |
The MLID value passed to ibv_attach/detach_mcast() must be in host
|
|
|
6698ac |
byte order.
|
|
|
6698ac |
|
|
|
6698ac |
acmp.c incorrectly uses the big endian format when doing a multicast
|
|
|
6698ac |
attach/detach (join). Multicast packets are used to do name resolution
|
|
|
6698ac |
by the libibacmp library.
|
|
|
6698ac |
|
|
|
6698ac |
There are two possible results because of this issue.
|
|
|
6698ac |
|
|
|
6698ac |
If a kernel has commit 8561eae60ff9, the attach will fail with an
|
|
|
6698ac |
EINVAL. ibacm will log this as a failure during the multicast join.
|
|
|
6698ac |
|
|
|
6698ac |
If a kernel does not have commit 8561eae60ff9, the attach will
|
|
|
6698ac |
complete successfully. Packets sent to this address will be dropped
|
|
|
6698ac |
because the packet dlid value and the multicast address information
|
|
|
6698ac |
given by the attach will not match.
|
|
|
6698ac |
|
|
|
6698ac |
Update MLID usage to use the correct byte order.
|
|
|
6698ac |
|
|
|
6698ac |
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
|
|
|
6698ac |
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
|
|
|
6698ac |
Signed-off-by: Doug Ledford <dledford@redhat.com>
|
|
|
6698ac |
|
|
|
6698ac |
diff --git a/ibacm/prov/acmp/src/acmp.c b/ibacm/prov/acmp/src/acmp.c
|
|
|
6698ac |
index aa784166..78d9a295 100644
|
|
|
6698ac |
--- a/ibacm/prov/acmp/src/acmp.c
|
|
|
6698ac |
+++ b/ibacm/prov/acmp/src/acmp.c
|
|
|
6698ac |
@@ -732,7 +732,7 @@ static void acmp_process_join_resp(struct acm_sa_mad *sa_mad)
|
|
|
6698ac |
acm_log(0, "ERROR - unable to create ah\n");
|
|
|
6698ac |
goto out;
|
|
|
6698ac |
}
|
|
|
6698ac |
- ret = ibv_attach_mcast(ep->qp, &mc_rec->mgid, mc_rec->mlid);
|
|
|
6698ac |
+ ret = ibv_attach_mcast(ep->qp, &dest->mgid, dest->av.dlid);
|
|
|
6698ac |
if (ret) {
|
|
|
6698ac |
acm_log(0, "ERROR - unable to attach QP to multicast group\n");
|
|
|
6698ac |
ibv_destroy_ah(dest->ah);
|
|
|
6698ac |
@@ -1429,7 +1429,7 @@ static void acmp_ep_join(struct acmp_ep *ep)
|
|
|
6698ac |
|
|
|
6698ac |
if (ep->mc_dest[0].state == ACMP_READY && ep->mc_dest[0].ah) {
|
|
|
6698ac |
ibv_detach_mcast(ep->qp, &ep->mc_dest[0].mgid,
|
|
|
6698ac |
- be16toh(ep->mc_dest[0].av.dlid));
|
|
|
6698ac |
+ ep->mc_dest[0].av.dlid);
|
|
|
6698ac |
ibv_destroy_ah(ep->mc_dest[0].ah);
|
|
|
6698ac |
ep->mc_dest[0].ah = NULL;
|
|
|
6698ac |
}
|