diff --git a/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp b/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
index c51a722..6d2c2b1 100644
--- a/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
+++ b/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
@@ -25,12 +25,17 @@
 
 #include <set>
 
-#ifdef ANDROID
+#if defined(__ANDROID__) || defined(__linux__)
 #include <unistd.h>
 #include <errno.h>
 #endif
+
 #include <sys/mman.h>
 
+#if !defined(HOST_BUILD) && defined(VIRTIO_GPU)
+#include <xf86drm.h>
+#endif
+
 using android::base::guest::SubAllocator;
 
 namespace goldfish_vk {
@@ -260,27 +265,38 @@
     VkEncoder* enc,
     VkDevice device,
     HostMemAlloc* toDestroy) {
+#if !defined(HOST_BUILD) && defined(VIRTIO_GPU)
+    if (toDestroy->rendernodeFd >= 0) {
+
+        if (toDestroy->memoryAddr) {
+            int ret = munmap((void*)toDestroy->memoryAddr, toDestroy->memorySize);
+            if (ret != 0) {
+                ALOGE("%s: fail to unmap addr = 0x%" PRIx64", size = %d, ret = "
+                      "%d, errno = %d", __func__, toDestroy->memoryAddr,
+                      (int32_t)toDestroy->memorySize, ret, errno);
+            }
+        }
+
+        if (toDestroy->boCreated) {
+            ALOGV("%s: trying to destroy bo = %u\n", __func__,
+                  toDestroy->boHandle);
+            struct drm_gem_close drmGemClose = {};
+            drmGemClose.handle = toDestroy->boHandle;
+            int ret = drmIoctl(toDestroy->rendernodeFd, DRM_IOCTL_GEM_CLOSE, &drmGemClose);
+            if (ret != 0) {
+                ALOGE("%s: fail to close gem = %u, ret = %d, errno = %d\n",
+                      __func__, toDestroy->boHandle, ret, errno);
+            } else {
+                ALOGV("%s: successfully close gem = %u, ret = %d\n", __func__,
+                      toDestroy->boHandle, ret);
+            }
+        }
+    }
+#endif
 
     if (toDestroy->initResult != VK_SUCCESS) return;
     if (!toDestroy->initialized) return;
 
-#ifdef ANDROID
-    if (toDestroy->fd > 0) {
-
-        if (toDestroy->memoryAddr) {
-            int ret = munmap((void*)toDestroy->memoryAddr, toDestroy->memorySize);
-            ALOGE("%s: trying to unmap addr = 0x%" PRIx64", size = %d, ret = %d, errno = %d\n", __func__, toDestroy->memoryAddr, (int32_t)toDestroy->memorySize, ret, errno);
-        }
-
-        ALOGE("%s: trying to close fd = %d\n", __func__, toDestroy->fd);
-        int ret = close(toDestroy->fd);
-        if (ret != 0) {
-            ALOGE("%s: fail to close fd = %d, ret = %d, errno = %d\n", __func__, toDestroy->fd, ret, errno);
-        } else {
-            ALOGE("%s: successfully close fd = %d, ret = %d\n", __func__, toDestroy->fd, ret);
-        }
-    }
-#endif
 
     if (freeMemorySyncSupported) {
         enc->vkFreeMemorySyncGOOGLE(device, toDestroy->memory, nullptr, false /* no lock */);
diff --git a/system/vulkan_enc/HostVisibleMemoryVirtualization.h b/system/vulkan_enc/HostVisibleMemoryVirtualization.h
index 6501ab5..1a52c5a 100644
--- a/system/vulkan_enc/HostVisibleMemoryVirtualization.h
+++ b/system/vulkan_enc/HostVisibleMemoryVirtualization.h
@@ -83,7 +83,9 @@
     VkDeviceSize mappedSize = 0;
     uint8_t* mappedPtr = nullptr;
     android::base::guest::SubAllocator* subAlloc = nullptr;
-    int fd = -1;
+    int rendernodeFd = -1;
+    bool boCreated = false;
+    uint32_t boHandle = 0;
     uint64_t memoryAddr = 0;
     size_t memorySize = 0;
     bool isDeviceAddressMemoryAllocation = false;
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 0bf1a5b..00d161c 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -3718,9 +3718,6 @@
 #if !defined(HOST_BUILD) && defined(VIRTIO_GPU)
                 uint64_t hvaSizeId[3];
 
-                int rendernodeFdForMem = drmOpenRender(128 /* RENDERNODE_MINOR */);
-                ALOGE("%s: render fd = %d\n", __func__, rendernodeFdForMem);
-
                 mLock.unlock();
                 enc->vkGetMemoryHostAddressInfoGOOGLE(
                         device, hostMemAlloc.memory,
@@ -3738,19 +3735,21 @@
                 drm_rc_blob.size = hvaSizeId[1];
 
                 int res = drmIoctl(
-                    rendernodeFdForMem, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB, &drm_rc_blob);
+                    mRendernodeFd, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB, &drm_rc_blob);
 
                 if (res) {
-                    ALOGE("%s: Failed to resource create v2: sterror: %s errno: %d\n", __func__,
+                    ALOGE("%s: Failed to resource create blob: sterror: %s errno: %d\n", __func__,
                             strerror(errno), errno);
                     abort();
                 }
+                hostMemAlloc.boCreated = true;
+                hostMemAlloc.boHandle = drm_rc_blob.bo_handle;
 
                 drm_virtgpu_map map_info;
                 memset(&map_info, 0, sizeof(map_info));
                 map_info.handle = drm_rc_blob.bo_handle;
 
-                res = drmIoctl(rendernodeFdForMem, DRM_IOCTL_VIRTGPU_MAP, &map_info);
+                res = drmIoctl(mRendernodeFd, DRM_IOCTL_VIRTGPU_MAP, &map_info);
                 if (res) {
                     ALOGE("%s: Failed to virtgpu map: sterror: %s errno: %d\n", __func__,
                             strerror(errno), errno);
@@ -3758,21 +3757,22 @@
                 }
 
                 directMappedAddr = (uint64_t)(uintptr_t)
-                    mmap64(0, hvaSizeId[1], PROT_WRITE, MAP_SHARED, rendernodeFdForMem, map_info.offset);
+                    mmap64(0, hvaSizeId[1], PROT_WRITE, MAP_SHARED, mRendernodeFd, map_info.offset);
 
                 if ((void*)directMappedAddr == MAP_FAILED) {
                     ALOGE("%s: mmap of virtio gpu resource failed\n", __func__);
                     abort();
                 }
 
+                // Does not take  ownership for the device.
+                hostMemAlloc.rendernodeFd = mRendernodeFd;
                 hostMemAlloc.memoryAddr = directMappedAddr;
                 hostMemAlloc.memorySize = hvaSizeId[1];
 
                 // add the host's page offset
                 directMappedAddr += (uint64_t)(uintptr_t)(hvaSizeId[0]) & (PAGE_SIZE - 1);
-				directMapResult = VK_SUCCESS;
+                directMapResult = VK_SUCCESS;
 
-                hostMemAlloc.fd = rendernodeFdForMem;
 #endif // VK_USE_PLATFORM_ANDROID_KHR
             }
 
