]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c
OvmfPkg/VirtioFsDxe: manage path lifecycle in OpenVolume, Close, Delete
[mirror_edk2.git] / OvmfPkg / VirtioFsDxe / SimpleFsOpenVolume.c
index 67d2deb6bdf27ee0fadb98ddf3c7902349eeed8a..9c0ab434c186698f544551aabf59435ae30b077d 100644 (file)
@@ -28,6 +28,7 @@ VirtioFsOpenVolume (
   VIRTIO_FS      *VirtioFs;\r
   VIRTIO_FS_FILE *VirtioFsFile;\r
   EFI_STATUS     Status;\r
+  CHAR8          *CanonicalPathname;\r
   UINT64         RootDirHandle;\r
 \r
   VirtioFs = VIRTIO_FS_FROM_SIMPLE_FS (This);\r
@@ -37,13 +38,19 @@ VirtioFsOpenVolume (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
+  CanonicalPathname = AllocateCopyPool (sizeof "/", "/");\r
+  if (CanonicalPathname == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto FreeVirtioFsFile;\r
+  }\r
+\r
   //\r
   // Open the root directory.\r
   //\r
   Status = VirtioFsFuseOpenDir (VirtioFs, VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID,\r
              &RootDirHandle);\r
   if (EFI_ERROR (Status)) {\r
-    goto FreeVirtioFsFile;\r
+    goto FreeCanonicalPathname;\r
   }\r
 \r
   //\r
@@ -64,6 +71,7 @@ VirtioFsOpenVolume (
   VirtioFsFile->IsDirectory            = TRUE;\r
   VirtioFsFile->IsOpenForWriting       = FALSE;\r
   VirtioFsFile->OwnerFs                = VirtioFs;\r
+  VirtioFsFile->CanonicalPathname      = CanonicalPathname;\r
   VirtioFsFile->NodeId                 = VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID;\r
   VirtioFsFile->FuseHandle             = RootDirHandle;\r
 \r
@@ -75,6 +83,9 @@ VirtioFsOpenVolume (
   *Root = &VirtioFsFile->SimpleFile;\r
   return EFI_SUCCESS;\r
 \r
+FreeCanonicalPathname:\r
+  FreePool (CanonicalPathname);\r
+\r
 FreeVirtioFsFile:\r
   FreePool (VirtioFsFile);\r
 \r