[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) {