## @file
# Provide EFI_SIMPLE_FILE_SYSTEM_PROTOCOL instances on virtio-fs devices.
#
# Copyright (C) 2020, Red Hat, Inc.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
#
# Permission Model of this driver:
#
# Regardless of the UID and GID values this driver send in the FUSE request
# header, the daemon (that is, the Virtio Filesystem device) always acts with
# root privileges on the host side. The only time the daemon considers said UID
# and GID fields is when creating a new file or directory. Thus, the guest
# driver cannot rely on the host for enforcing any file mode permissions,
# regardless of the "personality" that the guest driver poses as, because
# "root" on the host side ignores all file mode bits.
#
# Therefore the guest driver has to do its own permission checking, and use the
# host-side file mode bits only as a kind of "metadata storage" or "reminder"
# -- hopefully in a way that makes some sense on the host side too.
#
# The complete mapping between the EFI_FILE_PROTOCOL and the host-side file
# mode bits is described below.
#
# - The guest driver poses as UID 0, GID 0, PID 1.
#
# - If and only if all "w" bits are missing from a file on the host side, then
#   the file or directory is reported as EFI_FILE_READ_ONLY in the guest. When
#   setting EFI_FILE_READ_ONLY in the guest, all "w" bits (0222) are cleared on
#   the host; when clearing EFI_FILE_READ_ONLY in the guest, all "w" bits are
#   set on the host. Viewed from the host side, this sort of reflects that an
#   EFI_FILE_READ_ONLY file should not be written by anyone.
#
# - The attributes EFI_FILE_HIDDEN, EFI_FILE_SYSTEM, EFI_FILE_RESERVED, and
#   EFI_FILE_ARCHIVE are never reported in the guest, and they are silently
#   ignored when a SetInfo() call or a file-creating Open() call requests them.
#
# - On the host, files are created with 0666 file mode bits, directories are
#   created with 0777 file mode bits.
#
# - In the guest, the EFI_FILE_READ_ONLY attribute only controls the permitted
#   open mode. In particular, on directories, the EFI_FILE_READ_ONLY attribute
#   does not prevent the creation or deletion of entries inside the directory;
#   EFI_FILE_READ_ONLY only prevents the renaming, deleting, flushing (syncing)
#   and touching of the directory itself (with "touching" meaning updating the
#   timestamps). The fact that EFI_FILE_READ_ONLY being set on a directory is
#   irrelevant in the guest with regard to entry creation/deletion, is
#   well-mirrored by the fact that virtiofsd -- which runs as root, regardless
#   of guest driver personality -- ignores the absence of "w" permissions on a
#   host-side directory, when creating or removing entries in it.
#
# - When an EFI_FILE_PROTOCOL is opened read-only, then the Delete(), Write()
#   and Flush() member functions are disabled for it. Additionally, SetInfo()
#   is restricted to flipping the EFI_FILE_READ_ONLY bit (which takes effect at
#   the next Open()).
#
# - As a consequence of the above, for deleting a directory, it must be
#   presented in the guest as openable for writing.
#
# - We diverge from the UEFI spec, and permit Flush() on a directory that has
#   been opened read-write; otherwise the only way to invoke FUSE_FSYNCDIR on a
#   directory would be to Close() it.
#
# - OpenVolume() opens the root directory for read-only access. The Open()
#   member function may open it for read-write access. While the root directory
#   cannot be renamed or deleted, opening it for read-write access is useful
#   for calling Flush(), according to the previous paragraph, or for updating
#   the root directory's timestamps with SetInfo().
##

[Defines]
  INF_VERSION                           = 1.29
  BASE_NAME                             = VirtioFsDxe
  FILE_GUID                             = 7BD9DDF7-8B83-488E-AEC9-24C78610289C
  MODULE_TYPE                           = UEFI_DRIVER
  ENTRY_POINT                           = VirtioFsEntryPoint

[Packages]
  EmbeddedPkg/EmbeddedPkg.dec
  MdePkg/MdePkg.dec
  OvmfPkg/OvmfPkg.dec

[Sources]
  DriverBinding.c
  FuseFlush.c
  FuseForget.c
  FuseFsync.c
  FuseGetAttr.c
  FuseInit.c
  FuseLookup.c
  FuseMkDir.c
  FuseOpen.c
  FuseOpenDir.c
  FuseOpenOrCreate.c
  FuseRead.c
  FuseRelease.c
  FuseRename.c
  FuseSetAttr.c
  FuseStatFs.c
  FuseUnlink.c
  FuseWrite.c
  Helpers.c
  SimpleFsClose.c
  SimpleFsDelete.c
  SimpleFsFlush.c
  SimpleFsGetInfo.c
  SimpleFsGetPosition.c
  SimpleFsOpen.c
  SimpleFsOpenVolume.c
  SimpleFsRead.c
  SimpleFsSetInfo.c
  SimpleFsSetPosition.c
  SimpleFsWrite.c
  VirtioFsDxe.h

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  DebugLib
  MemoryAllocationLib
  TimeBaseLib
  UefiBootServicesTableLib
  UefiDriverEntryPoint
  VirtioLib

[Protocols]
  gEfiComponentName2ProtocolGuid        ## PRODUCES
  gEfiDriverBindingProtocolGuid         ## PRODUCES
  gEfiSimpleFileSystemProtocolGuid      ## BY_START
  gVirtioDeviceProtocolGuid             ## TO_START

[Guids]
  gEfiFileInfoGuid
  gEfiFileSystemInfoGuid
  gEfiFileSystemVolumeLabelInfoIdGuid
