Blame SOURCES/0001-ibacm-incorrect-usage-of-be-byte.patch

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
 	}