From 855218b3f7c69ea9540a5159ebc0e19e6c37e51d Mon Sep 17 00:00:00 2001 From: Ralph Campbell Date: Wed, 17 Oct 2007 13:07:17 -0700 Subject: [PATCH] IB/core - Don't modify outgoing DR SMP if first part is LID routed The code in handle_outgoing_dr_smp() checks to see if the directed route SMP has an initial LID routed part and correctly does not modify the hop pointer but it then proceeds to process the packet as if there was no initial LID routed part. Instead, if there is an initial LID routed part, the packet should just be sent on to the destination and not processed further since it can't be destined for the local SM/SMA. Signed-off-by: Ralph Campbell Signed-off-by: Vladimir Sokolovsky (Ported from Mellanox OFED 2.4) Signed-off-by: Mukesh Kacker --- drivers/infiniband/core/mad.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 74c30f4c557e..4b759308ff3d 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c @@ -749,9 +749,10 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv, * If we are at the start of the LID routed part, don't update the * hop_ptr or hop_cnt. See section 14.2.2, Vol 1 IB spec. */ - if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) == - IB_LID_PERMISSIVE && - smi_handle_dr_smp_send(smp, device->node_type, port_num) == + if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) != + IB_LID_PERMISSIVE) + goto out; + if (smi_handle_dr_smp_send(smp, device->node_type, port_num) == IB_SMI_DISCARD) { ret = -EINVAL; dev_err(&device->dev, "Invalid directed route\n"); -- 2.50.1