[Fuchsia] Open paths in the namespace as read-only

This allows the ICD to open read-only files without fdio.

fdio_service_open specifies READ+WRITE but the write flag
appears unnecessary for service connection.

Bug:13095

Change-Id: If24fcbc924efb787180971cf24551c657a0f43d9
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/Vulkan-Loader/+/428358
Reviewed-by: John Bauman <jbauman@google.com>
diff --git a/fuchsia/loader_extensions.c b/fuchsia/loader_extensions.c
index 16fbf9f..f82ffa2 100644
--- a/fuchsia/loader_extensions.c
+++ b/fuchsia/loader_extensions.c
@@ -17,6 +17,7 @@
  */
 
 #include <lib/fdio/directory.h>
+#include <zircon/device/vfs.h>
 
 #include "loader.h"
 
@@ -24,7 +25,8 @@
 typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_vkInitializeConnectToServiceCallbackAddr)(PFN_vkConnectToServiceAddr);
 
 VKAPI_ATTR static VkResult VKAPI_CALL loader_fdio_get_service(const char *pName, uint32_t handle) {
-    zx_status_t status = fdio_service_connect(pName, handle);
+    // fdio_service_connect specifies READ+WRITE, which fails for read-only files
+    zx_status_t status = fdio_open(pName, ZX_FS_RIGHT_READABLE, handle);
     if (status == ZX_OK) {
         return VK_SUCCESS;
     } else {
@@ -36,6 +38,7 @@
 void loader_initialize_icd_services(loader_platform_dl_handle handle) {
     PFN_vkInitializeConnectToServiceCallbackAddr fp_initialize_connect_to_service_callback_addr;
 
+    // TODO(fxb/60206) - rename since this can be used for opening files
     fp_initialize_connect_to_service_callback_addr =
         loader_platform_get_proc_address(handle, "vk_icdInitializeConnectToServiceCallback");
     if (!fp_initialize_connect_to_service_callback_addr) {