Ack
/Hans

On 01/24/2014 07:26 AM, Gary Lee wrote:
>   osaf/services/saf/amf/amfd/include/node.h |   1 +
>   osaf/services/saf/amf/amfd/nodegroup.cc   |  35 
> ++++++++++++++++++++++++++++++-
>   osaf/services/saf/amf/amfd/sg.cc          |  19 +---------------
>   3 files changed, 36 insertions(+), 19 deletions(-)
>
>
> * fix out-of-bounds read in ng_ccb_apply_modify_hdlr() when the node to be
>    deleted is located at the end of saAmfNGNodeList
> * modify ng_ccb_completed_modify_hdlr() to reject multiple node deletions
>    from a node group in a single CCB, as this is not currently supported
>    in ng_ccb_apply_modify_hdlr(). Also add a check for attempts to delete
>    a node that does not belong to the node group. Previously this caused
>    an assert.
> * replace node_in_ng() from sg.cc with a similar function
>    node_in_nodegroup() in nodegroup.cc, to avoid code duplication.
>
> diff --git a/osaf/services/saf/amf/amfd/include/node.h 
> b/osaf/services/saf/amf/amfd/include/node.h
> --- a/osaf/services/saf/amf/amfd/include/node.h
> +++ b/osaf/services/saf/amf/amfd/include/node.h
> @@ -209,6 +209,7 @@
>   extern SaAisErrorT avd_ng_config_get(void);
>   extern AVD_AMF_NG *avd_ng_get(const SaNameT *dn);
>   extern void avd_ng_constructor(void);
> +extern bool node_in_nodegroup(const SaNameT *node, const AVD_AMF_NG *ng);
>
>   /* AMF Node SW Bundle */
>   extern void avd_nodeswbundle_constructor(void);
> diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc 
> b/osaf/services/saf/amf/amfd/nodegroup.cc
> --- a/osaf/services/saf/amf/amfd/nodegroup.cc
> +++ b/osaf/services/saf/amf/amfd/nodegroup.cc
> @@ -260,6 +260,24 @@
>   }
>
>   /**
> + * Determine if a node is in a node group
> + * @param node node
> + * @param ng nodegroup
> + *
> + * @return true if found, otherwise false
> + */
> +bool node_in_nodegroup(const SaNameT *node, const AVD_AMF_NG *ng)
> +{
> +     for (unsigned int i = 0; i < ng->number_nodes; i++) {
> +             if ((ng->saAmfNGNodeList[i].length == node->length) &&
> +                     memcmp(&ng->saAmfNGNodeList[i].value, node->value, 
> node->length) == 0)
> +                     return true;
> +     }
> +     
> +     return false;
> +}
> +
> +/**
>    * Validate modification of node group
>    * @param opdata
>    *
> @@ -275,6 +293,7 @@
>       AVD_SU *su;
>       int delete_found = 0;
>       int add_found = 0;
> +     int nodes_deleted = 0;
>       AVD_AMF_NG *ng;
>
>       TRACE_ENTER();
> @@ -305,6 +324,12 @@
>
>                               TRACE("DEL %s", ((SaNameT 
> *)mod->modAttr.attrValues[j])->value);
>
> +                             if (node_in_nodegroup((SaNameT 
> *)mod->modAttr.attrValues[j], ng) == false) {
> +                                     report_ccb_validation_error(opdata, "ng 
> modify: node '%s' does not exist in node group",
> +                                             ((SaNameT 
> *)mod->modAttr.attrValues[j])->value);
> +                                     goto done;
> +                             }
> +                             
>                               /* Ensure no SU is mapped to this node via the 
> node group */
>
>                               /* for all OpenSAF SUs hosted by this node */
> @@ -327,6 +352,14 @@
>                                               goto done;
>                                       }
>                               }
> +                             
> +                             ++nodes_deleted;
> +                             /* currently, we don't support multiple node 
> deletions from a group in a CCB */
> +                             if (nodes_deleted > 1) {
> +                                     report_ccb_validation_error(opdata,
> +                                             "ng modify: cannot delete more 
> than one node from a node group in a CCB");
> +                                     goto done;
> +                             }
>                       }
>               }
>
> @@ -509,7 +542,7 @@
>
>                       TRACE("found node %s", ng->saAmfNGNodeList[j].value);
>
> -                     for (; j < ng->number_nodes; j++)
> +                     for (; j < (ng->number_nodes - 1); j++)
>                               ng->saAmfNGNodeList[j] = ng->saAmfNGNodeList[j 
> + 1];
>
>                       ng->number_nodes -= mod->modAttr.attrValuesNumber;
> diff --git a/osaf/services/saf/amf/amfd/sg.cc 
> b/osaf/services/saf/amf/amfd/sg.cc
> --- a/osaf/services/saf/amf/amfd/sg.cc
> +++ b/osaf/services/saf/amf/amfd/sg.cc
> @@ -479,23 +479,6 @@
>   }
>
>   /**
> - * Check if the node represented by nodename is a member of node group ng
> - * @param nodename
> - * @param ng
> - * @return
> - */
> -static bool node_in_ng(const SaNameT *nodename, const AVD_AMF_NG *ng)
> -{
> -     for (unsigned i = 0; i < ng->number_nodes; i++) {
> -             if (strncmp((char*)nodename->value,
> -                             (char*)ng->saAmfNGNodeList[i].value, 
> SA_MAX_NAME_LENGTH) == 0)
> -                     return true;
> -     }
> -
> -     return false;
> -}
> -
> -/**
>    * Check if the node group represented by ngname is a subset of the node 
> group
>    * represented by supername
>    * @param ngname
> @@ -513,7 +496,7 @@
>       for (unsigned i = 0; i < ng->number_nodes; i++) {
>               nodename = &ng->saAmfNGNodeList[i];
>
> -             if (node_in_ng(nodename, superng) == false)
> +             if (node_in_nodegroup(nodename, superng) == false)
>                       return false;
>       }
>
>
> ------------------------------------------------------------------------------
> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
> Learn Why More Businesses Are Choosing CenturyLink Cloud For
> Critical Workloads, Development Environments & Everything In Between.
> Get a Quote or Start a Free Trial Today.
> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
> _______________________________________________
> Opensaf-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>
>

------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to