Hi Thang

ack (review only)

Thanks

Gary

On 2/7/19 12:25 pm, thang.d.nguyen wrote:
During controller goes up, it creats config object from IMM.
In case the object was deleted but comming up amfd still
receives ccb object delete callback. And it validates and
crash due to access to null pointer.
---
  src/amf/amfd/app.cc      | 17 ++++++++++-------
  src/amf/amfd/apptype.cc  | 13 +++++++++++--
  src/amf/amfd/comptype.cc | 10 +++++++++-
  3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/amf/amfd/app.cc b/src/amf/amfd/app.cc
index 424d828..67e5e3e 100644
--- a/src/amf/amfd/app.cc
+++ b/src/amf/amfd/app.cc
@@ -319,13 +319,16 @@ static void app_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
      }
      case CCBUTIL_DELETE:
        app = app_db->find(Amf::to_string(&opdata->objectName));
-      /* by this time all the SGs and SIs under this
-       * app object should have been *DELETED* just
-       * do a sanity check here
-       */
-      osafassert(app->list_of_sg == nullptr);
-      osafassert(app->list_of_si == nullptr);
-      avd_app_delete(app);
+      if ((app != nullptr) || (avd_cb->is_active() == true)) {
+        /* by this time all the SGs and SIs under this
+         * app object should have been *DELETED* just
+         * do a sanity check here
+         */
+        osafassert(app);
+        osafassert(app->list_of_sg == nullptr);
+        osafassert(app->list_of_si == nullptr);
+        avd_app_delete(app);
+      }
        break;
      default:
        osafassert(0);
diff --git a/src/amf/amfd/apptype.cc b/src/amf/amfd/apptype.cc
index c22147f..20c94cb 100644
--- a/src/amf/amfd/apptype.cc
+++ b/src/amf/amfd/apptype.cc
@@ -155,6 +155,12 @@ static SaAisErrorT 
apptype_ccb_completed_cb(CcbUtilOperationData_t *opdata) {
        break;
      case CCBUTIL_DELETE:
        app_type = avd_apptype_get(object_name);
+      if (app_type == nullptr && avd_cb->is_active() == false) {
+        opdata->userData = nullptr;
+        rc = SA_AIS_OK;
+        break;
+      }
+      osafassert(app_type);
        if (nullptr != app_type->list_of_app) {
          /* check whether there exists a delete operation for
           * each of the App in the app_type list in the current CCB
@@ -201,8 +207,11 @@ static void apptype_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
        apptype_add_to_model(app_type);
        break;
      case CCBUTIL_DELETE:
-      app_type = static_cast<AVD_APP_TYPE *>(opdata->userData);
-      apptype_delete(&app_type);
+      if ((opdata->userData != nullptr) || (avd_cb->is_active() == true)) {
+        app_type = static_cast<AVD_APP_TYPE *>(opdata->userData);
+        osafassert(app_type);
+        apptype_delete(&app_type);
+      }
        break;
      default:
        osafassert(0);
diff --git a/src/amf/amfd/comptype.cc b/src/amf/amfd/comptype.cc
index 38582cc..48a333e 100644
--- a/src/amf/amfd/comptype.cc
+++ b/src/amf/amfd/comptype.cc
@@ -630,7 +630,9 @@ static void comptype_ccb_apply_cb(CcbUtilOperationData_t 
*opdata) {
        comptype_db_add(comp_type);
        break;
      case CCBUTIL_DELETE:
-      comptype_delete(static_cast<AVD_COMP_TYPE *>(opdata->userData));
+      if ((opdata->userData != nullptr) || (avd_cb->is_active() == true)) {
+        comptype_delete(static_cast<AVD_COMP_TYPE *>(opdata->userData));
+      }
        break;
      case CCBUTIL_MODIFY:
        ccb_apply_modify_hdlr(opdata);
@@ -802,6 +804,12 @@ static SaAisErrorT 
comptype_ccb_completed_cb(CcbUtilOperationData_t *opdata) {
        break;
      case CCBUTIL_DELETE:
        comp_type = comptype_db->find(Amf::to_string(&opdata->objectName));
+      if (comp_type == nullptr && avd_cb->is_active() == false) {
+        rc = SA_AIS_OK;
+        opdata->userData = nullptr;
+        break;
+      }
+      osafassert(comp_type);
        if (nullptr != comp_type->list_of_comp) {
          /* check whether there exists a delete operation for
           * each of the Comp in the comp_type list in the current CCB


_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to