diff
    if ((vmbus_connection.monitor_pages[0] == NULL) ||
        (vmbus_connection.monitor_pages[1] == NULL)) {
        ret = -ENOMEM;
-       goto cleanup;
+       goto cleanup_monitor_pages;
    }

    ret = set_memory_decrypted((unsigned long)
                vmbus_connection.monitor_pages[0], 1);
    ret |= set_memory_decrypted((unsigned long)
                vmbus_connection.monitor_pages[1], 1);
    if (ret)
-       goto cleanup;
+       goto cleanup_monitor_pages;

    // ... (rest of the function)

+ cleanup_monitor_pages:
+   if (vmbus_connection.monitor_pages[0])
+       hv_free_hyperv_page(vmbus_connection.monitor_pages[0]);
+   if (vmbus_connection.monitor_pages[1])
+       hv_free_hyperv_page(vmbus_connection.monitor_pages[1]);
+   vmbus_connection.monitor_pages[0] = NULL;
+   vmbus_connection.monitor_pages[1] = NULL;

cleanup:
    pr_err("Unable to connect to host\n");
    vmbus_connection.conn_state = DISCONNECTED;
    vmbus_disconnect();
