From eb012c2aad707bfe1bc872da0cf1cc632b4d2039 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Wed, 17 Apr 2013 22:09:02 +0000 Subject: [PATCH] Defensive programming: add a constructor for opal_if_t that zeros everything out before using it. This is not in response to any known bug, but rather just a pre-emptive, defensive move to help prevent bugs in code that forgets to initialize a field. This commit was SVN r28343. --- opal/mca/if/base/if_base_components.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/opal/mca/if/base/if_base_components.c b/opal/mca/if/base/if_base_components.c index 1fed3db735..dcedcba2c0 100644 --- a/opal/mca/if/base/if_base_components.c +++ b/opal/mca/if/base/if_base_components.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2010-2013 Cisco Systems, Inc. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -22,12 +22,13 @@ opal_list_t opal_if_list; bool opal_if_do_not_resolve = false; bool opal_if_retain_loopback = false; -/* instance the opal_if_t object */ -OBJ_CLASS_INSTANCE(opal_if_t, opal_list_item_t, NULL, NULL); - static int opal_if_base_register (mca_base_register_flag_t flags); static int opal_if_base_open (mca_base_open_flag_t flags); static int opal_if_base_close(void); +static void opal_if_construct(opal_if_t *obj); + +/* instance the opal_if_t object */ +OBJ_CLASS_INSTANCE(opal_if_t, opal_list_item_t, opal_if_construct, NULL); MCA_BASE_FRAMEWORK_DECLARE(opal, if, NULL, opal_if_base_register, opal_if_base_open, opal_if_base_close, mca_if_base_static_components, 0); @@ -73,3 +74,14 @@ static int opal_if_base_close(void) return mca_base_framework_components_close (&opal_if_base_framework, NULL); } +static void opal_if_construct(opal_if_t *obj) +{ + memset(obj->if_name, 0, sizeof(obj->if_name)); + obj->if_index = -1; + obj->if_kernel_index = (uint16_t) -1; + obj->if_flags = 0; + obj->if_speed = 0; + memset(&obj->if_addr, 0, sizeof(obj->if_addr)); + obj->if_mask = 0; + obj->if_bandwidth = 0; +}