commonsys-intf: qdMetaData: Add get/setMetaData variants that unmap metadata

Add get/setMetaDataAndUnmap(..) api that remove the meta-data
mapping and reset the mapped pointer in handle.
Use these versions in setMetaData called during alloc to
ensure allocating process does not duplicate invalid
base address of metadata (i.e when native_handle is cloned
without importing)

Change-Id: Id4dc91700bc0cf5eace947fcaafacff9497a49bb
CRs-Fixed: 2265196
diff --git a/libqdmetadata/qdMetaData.cpp b/libqdmetadata/qdMetaData.cpp
index 3259ee2..c8217f3 100644
--- a/libqdmetadata/qdMetaData.cpp
+++ b/libqdmetadata/qdMetaData.cpp
@@ -64,6 +64,13 @@
     return 0;
 }
 
+static void unmapAndReset(private_handle_t *handle) {
+    if (private_handle_t::validate(handle) == 0 && handle->base_metadata) {
+        munmap(reinterpret_cast<void *>(handle->base_metadata), getMetaDataSize());
+        handle->base_metadata = 0;
+    }
+}
+
 int setMetaData(private_handle_t *handle, DispParamType paramType,
                 void *param) {
     auto err = validateAndMap(handle);
@@ -346,3 +353,17 @@
     return 0;
 }
 
+int setMetaDataAndUnmap(struct private_handle_t *handle, enum DispParamType paramType,
+                        void *param) {
+    auto ret = setMetaData(handle, paramType, param);
+    unmapAndReset(handle);
+    return ret;
+}
+
+int getMetaDataAndUnmap(struct private_handle_t *handle,
+                        enum DispFetchParamType paramType,
+                        void *param) {
+    auto ret = getMetaData(handle, paramType, param);
+    unmapAndReset(handle);
+    return ret;
+}
diff --git a/libqdmetadata/qdMetaData.h b/libqdmetadata/qdMetaData.h
index 3854843..b690ffe 100644
--- a/libqdmetadata/qdMetaData.h
+++ b/libqdmetadata/qdMetaData.h
@@ -209,6 +209,14 @@
 
 unsigned long getMetaDataSize();
 
+// Map, access metadata and unmap. Used by clients that do not import/free but
+//  clone and delete native_handle
+int setMetaDataAndUnmap(struct private_handle_t *handle, enum DispParamType paramType,
+                        void *param);
+int getMetaDataAndUnmap(struct private_handle_t *handle,
+                        enum DispFetchParamType paramType,
+                        void *param);
+
 #ifdef __cplusplus
 }
 #endif