> That looks right to me on the send side. Shouldn't there be the same check
 > on the recv side (smi_handle_dr_smp_recv) which was the intent of Roel's
 > original patch ?

Duh, yeah... got confused by two sets of similar-looking code.  But it
seems we want it in both places, right?  So something like:

 drivers/infiniband/core/smi.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/infiniband/core/smi.c b/drivers/infiniband/core/smi.c
index 8723675..5855e44 100644
--- a/drivers/infiniband/core/smi.c
+++ b/drivers/infiniband/core/smi.c
@@ -52,6 +52,10 @@ enum smi_action smi_handle_dr_smp_send(struct ib_smp *smp,
        hop_cnt = smp->hop_cnt;
 
        /* See section 14.2.2.2, Vol 1 IB spec */
+       /* C14-6 -- valid hop_cnt values are from 0 to 63 */
+       if (hop_cnt >= IB_SMP_MAX_PATH_HOPS)
+               return IB_SMI_DISCARD;
+
        if (!ib_get_smp_direction(smp)) {
                /* C14-9:1 */
                if (hop_cnt && hop_ptr == 0) {
@@ -133,6 +137,10 @@ enum smi_action smi_handle_dr_smp_recv(struct ib_smp *smp, 
u8 node_type,
        hop_cnt = smp->hop_cnt;
 
        /* See section 14.2.2.2, Vol 1 IB spec */
+       /* C14-6 -- valid hop_cnt values are from 0 to 63 */
+       if (hop_cnt >= IB_SMP_MAX_PATH_HOPS)
+               return IB_SMI_DISCARD;
+
        if (!ib_get_smp_direction(smp)) {
                /* C14-9:1 -- sender should have incremented hop_ptr */
                if (hop_cnt && hop_ptr == 0)
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to