From patchwork Tue Feb 4 05:54:38 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jens Domke X-Patchwork-Id: 3573971 Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 07C429F2F5 for ; Tue, 4 Feb 2014 06:19:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4563420179 for ; Tue, 4 Feb 2014 06:19:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CFD382016C for ; Tue, 4 Feb 2014 06:19:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751079AbaBDGTO (ORCPT ); Tue, 4 Feb 2014 01:19:14 -0500 Received: from mail02.nap.gsic.titech.ac.jp ([131.112.13.21]:38698 "HELO mail02.nap.gsic.titech.ac.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1750780AbaBDGTO (ORCPT ); Tue, 4 Feb 2014 01:19:14 -0500 X-Greylist: delayed 1464 seconds by postgrey-1.27 at vger.kernel.org; Tue, 04 Feb 2014 01:19:13 EST Received: from 131.112.13.36 by mail02.nap.gsic.titech.ac.jp with Mail2000 ESMTP Server V6.00S(986:0:AUTH_RELAY) (envelope-from ); Tue, 04 Feb 2014 14:54:39 +0900 (JST) Received: from [131.112.13.20] (mail01.nap.gsic.titech.ac.jp) by drweb1.nap.gsic.titech.ac.jp (Dr.Web MailD 6.0.2.0) with SMTP id 04019860; Tue, 04 Feb 2014 14:54:39 Received: from 131.112.35.124 by mail01.nap.gsic.titech.ac.jp with Mail2000 ESMTP Server V6.00S(18486:0:AUTH_LOGIN) (envelope-from ); Tue, 04 Feb 2014 14:54:39 +0900 (JST) Message-ID: <52F0809E.5020306@m.titech.ac.jp> Date: Tue, 04 Feb 2014 14:54:38 +0900 From: Jens Domke User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Alex Netes CC: hal@mellanox.com, linux-rdma@vger.kernel.org Subject: Re: [PATCH 5/5] opensm: Resend LFTs/VLArb/SL2VL MADs in case of error References: <1391425516-14462-1-git-send-email-alexne@mellanox.com> <1391425516-14462-5-git-send-email-alexne@mellanox.com> In-Reply-To: <1391425516-14462-5-git-send-email-alexne@mellanox.com> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_TVD_MIME_EPI, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Dear Alex, the memset call in sl2vl_update_table causes segmentation faults if force_update=1, since p_tbl won't get anything assigned and remains NULL. Please, find a possible fix attached. Regards, Jens On 03.02.14 20:05, Alex Netes wrote: > There are several MADs that we only SET during the sweep (and never > GET). > Zero the stored block, so in case the MAD will end up with error, > we will resend it during the next sweep. > > Signed-off-by: Alex Netes > --- > opensm/osm_qos.c | 13 +++++++++++++ > opensm/osm_ucast_mgr.c | 7 +++++++ > 2 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/opensm/osm_qos.c b/opensm/osm_qos.c > index a301803..473e3c8 100644 > --- a/opensm/osm_qos.c > +++ b/opensm/osm_qos.c > @@ -183,6 +183,13 @@ static ib_api_status_t vlarb_update_table_block(osm_sm_t * sm, > if (!p_mad) > return IB_INSUFFICIENT_MEMORY; > > + /* > + * Zero the stored VL Arbitration block, so in case the MAD will > + * end up with error, we will resend it in the next sweep. > + */ > + memset(&p->vl_arb[block_num], 0, > + block_length * sizeof(block.vl_entry[0])); > + > cl_qlist_insert_tail(mad_list, &p_mad->list_item); > > return IB_SUCCESS; > @@ -272,6 +279,12 @@ static ib_api_status_t sl2vl_update_table(osm_sm_t * sm, osm_physp_t * p, > if (!p_mad) > return IB_INSUFFICIENT_MEMORY; > > + /* > + * Zero the stored SL2VL block, so in case the MAD will > + * end up with error, we will resend it in the next sweep. > + */ > + memset(p_tbl, 0, sizeof(tbl)); > + > cl_qlist_insert_tail(mad_list, &p_mad->list_item); > return IB_SUCCESS; > } > diff --git a/opensm/osm_ucast_mgr.c b/opensm/osm_ucast_mgr.c > index 8194307..c8a7360 100644 > --- a/opensm/osm_ucast_mgr.c > +++ b/opensm/osm_ucast_mgr.c > @@ -1002,6 +1002,13 @@ static int set_lft_block(IN osm_switch_t *p_sw, IN osm_ucast_mgr_t *p_mgr, > IB_SMP_DATA_SIZE)) > return 0; > > + /* > + * Zero the stored LFT block, so in case the MAD will end up > + * with error, we will resend it in the next sweep. > + */ > + memset(p_sw->lft + block_id_ho * IB_SMP_DATA_SIZE, OSM_NO_PATH, > + IB_SMP_DATA_SIZE); > + > OSM_LOG(p_mgr->p_log, OSM_LOG_DEBUG, > "Writing FT block %u to switch 0x%" PRIx64 "\n", block_id_ho, > cl_ntoh64(context.lft_context.node_guid)); > From 3cbe8f10c4ab7d83c5898b67e42d9e99be355c05 Mon Sep 17 00:00:00 2001 From: Jens Domke Date: Tue, 4 Feb 2014 14:47:44 +0900 Subject: [PATCH 1/1] osm_qos.c: fix potential segmentation fault if force_update=1, then p_tbl remains NULL and therefore memset crashes Signed-off-by: Jens Domke --- opensm/osm_qos.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/opensm/osm_qos.c b/opensm/osm_qos.c index 473e3c8..76f0ff6 100644 --- a/opensm/osm_qos.c +++ b/opensm/osm_qos.c @@ -252,7 +252,7 @@ static ib_api_status_t sl2vl_update_table(osm_sm_t * sm, osm_physp_t * p, const ib_slvl_table_t * sl2vl_table, cl_qlist_t *mad_list) { - ib_slvl_table_t tbl, *p_tbl; + ib_slvl_table_t tbl, *p_tbl = NULL; unsigned vl_mask; uint8_t vl1, vl2; int i; @@ -283,7 +283,8 @@ static ib_api_status_t sl2vl_update_table(osm_sm_t * sm, osm_physp_t * p, * Zero the stored SL2VL block, so in case the MAD will * end up with error, we will resend it in the next sweep. */ - memset(p_tbl, 0, sizeof(tbl)); + if (p_tbl) + memset(p_tbl, 0, sizeof(tbl)); cl_qlist_insert_tail(mad_list, &p_mad->list_item); return IB_SUCCESS;