[ofa-general] [infiniband-diags] [PATCH] [5/6] fix libibnetdisc API consistency and bugs

Al Chu chu11 at llnl.gov
Mon Jul 27 10:12:59 PDT 2009


Check input parameters to libibnetdisc functions

Al

-- 
Albert Chu
chu11 at llnl.gov
Computer Scientist
High Performance Systems Division
Lawrence Livermore National Laboratory
-------------- next part --------------
From: Albert Chu <chu11 at llnl.gov>
Date: Thu, 23 Jul 2009 14:15:25 -0700
Subject: [PATCH] Check input parameters to libibnetdisc functions


Signed-off-by: Albert Chu <chu11 at llnl.gov>
---
 infiniband-diags/libibnetdisc/src/chassis.c   |   15 ++++++++
 infiniband-diags/libibnetdisc/src/ibnetdisc.c |   47 ++++++++++++++++++++++++-
 2 files changed, 61 insertions(+), 1 deletions(-)

diff --git a/infiniband-diags/libibnetdisc/src/chassis.c b/infiniband-diags/libibnetdisc/src/chassis.c
index 78aee1f..5df910b 100644
--- a/infiniband-diags/libibnetdisc/src/chassis.c
+++ b/infiniband-diags/libibnetdisc/src/chassis.c
@@ -54,6 +54,11 @@ static char *ChassisSlotTypeStr[4] = { "", "Line", "Spine", "SRBD" };
 
 char *ibnd_get_chassis_type(ibnd_node_t *node)
 {
+        if (!node) {
+                IBND_DEBUG("node parameter NULL\n");
+                return (NULL);
+        }
+
 	/* Currently, only if Voltaire chassis */
 	if (mad_get_field(node->info, 0, IB_NODE_VENDORID_F) != VTR_VENDOR_ID)
 		return (NULL);
@@ -67,6 +72,11 @@ char *ibnd_get_chassis_type(ibnd_node_t *node)
 
 char *ibnd_get_chassis_slot_str(ibnd_node_t *node, char *str, size_t size)
 {
+        if (!node) {
+                IBND_DEBUG("node parameter NULL\n");
+                return (NULL);
+        }
+
 	/* Currently, only if Voltaire chassis */
 	if (mad_get_field(node->info, 0, IB_NODE_VENDORID_F) != VTR_VENDOR_ID)
 		return (NULL);
@@ -216,6 +226,11 @@ uint64_t ibnd_get_chassis_guid(ibnd_fabric_t *fabric, unsigned char chassisnum)
 	struct ibnd_fabric *f = CONV_FABRIC_INTERNAL(fabric);
 	ibnd_chassis_t *chassis;
 
+        if (!fabric) {
+                IBND_DEBUG("fabric parameter NULL\n");
+                return 0;
+        }
+
 	chassis = find_chassisnum(f, chassisnum);
 	if (chassis)
 		return chassis->chassisguid;
diff --git a/infiniband-diags/libibnetdisc/src/ibnetdisc.c b/infiniband-diags/libibnetdisc/src/ibnetdisc.c
index 5c5814d..3f9a3dd 100644
--- a/infiniband-diags/libibnetdisc/src/ibnetdisc.c
+++ b/infiniband-diags/libibnetdisc/src/ibnetdisc.c
@@ -239,6 +239,11 @@ ibnd_find_node_guid(ibnd_fabric_t *fabric, uint64_t guid)
 	int hash = HASHGUID(guid) % HTSZ;
 	struct ibnd_node *node;
 
+	if (!fabric) {
+		IBND_DEBUG("fabric parameter NULL\n");
+		return (NULL);
+	}
+
 	for (node = f->nodestbl[hash]; node; node = node->htnext)
 		if (node->node.guid == guid)
 			return (ibnd_node_t *)node;
@@ -275,6 +280,16 @@ ibnd_update_node(struct ibmad_port *ibmad_port, ibnd_fabric_t *fabric, ibnd_node
 	if (_check_ibmad_port(ibmad_port) < 0)
 		return (NULL);
 
+	if (!fabric) {
+		IBND_DEBUG("fabric parameter NULL\n");
+		return (NULL);
+	}
+
+	if (!node) {
+		IBND_DEBUG("node parameter NULL\n");
+		return (NULL);
+	}
+
 	if (query_node_info(ibmad_port, f, n, &(n->node.path_portid)))
 		return (NULL);
 
@@ -313,9 +328,16 @@ ibnd_find_node_dr(ibnd_fabric_t *fabric, char *dr_str)
 {
 	struct ibnd_fabric *f = CONV_FABRIC_INTERNAL(fabric);
 	int i = 0;
-	ibnd_node_t *rc = f->fabric.from_node;
+	ibnd_node_t *rc;
 	ib_dr_path_t path;
 
+	if (!fabric) {
+		IBND_DEBUG("fabric parameter NULL\n");
+		return (NULL);
+	}
+
+	rc = f->fabric.from_node;
+
 	if (str2drpath(&path, dr_str, 0, 0) == -1) {
 		return (NULL);
 	}
@@ -640,6 +662,9 @@ ibnd_destroy_fabric(ibnd_fabric_t *fabric)
 	struct ibnd_node *next = NULL;
 	ibnd_chassis_t *ch, *ch_next;
 
+	if (!fabric)
+		return;
+
 	ch = f->first_chassis;
 	while (ch) {
 		ch_next = ch->next;
@@ -684,6 +709,16 @@ ibnd_iter_nodes(ibnd_fabric_t *fabric,
 {
 	ibnd_node_t *cur = NULL;
 
+	if (!fabric) {
+		IBND_DEBUG("fabric parameter NULL\n");
+		return;
+	}
+
+	if (!func) {
+		IBND_DEBUG("func parameter NULL\n");
+		return;
+	}
+
 	for (cur = fabric->nodes; cur; cur = cur->next) {
 		func(cur, user_data);
 	}
@@ -700,6 +735,16 @@ ibnd_iter_nodes_type(ibnd_fabric_t *fabric,
 	struct ibnd_node *list = NULL;
 	struct ibnd_node *cur = NULL;
 
+	if (!fabric) {
+		IBND_DEBUG("fabric parameter NULL\n");
+		return;
+	}
+
+	if (!func) {
+		IBND_DEBUG("func parameter NULL\n");
+		return;
+	}
+
 	switch (node_type) {
 		case IB_NODE_SWITCH:
 			list = f->switches;
-- 
1.5.4.5



More information about the general mailing list