platform_system_core/fs_mgr
Bowgo Tsai 20651f62d0 first stage mount: removing the requirement of by-name prefix for AVB
Current first stage mount for AVB requires specifying a common prefix of
by-name symlink for all AVB partitions. It limits all AVB partitions to be on
the same block device.

firmware {
    android {
        compatible = "android,firmware";
        vbmeta {
            compatible = "android,vbmeta";
            parts = "vbmeta,boot,system,vendor";
            by_name_prefix="/dev/block/platform/soc.0/f9824900.sdhci/by-name"  <-- *removing this*
        };
        fstab {
            compatible = "android,fstab";
            vendor {
                compatible = "android,vendor";
                dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor";
                type = "ext4";
                mnt_flags = "ro,barrier=1,inode_readahead_blks=8";
                fsmgr_flags = "wait,avb";
            };
        };
    };
};

For normal mount with AVB, it extracts the by-name prefix of /misc
partition and use it as the prefix for all other partitions:
    - /dev/block/platform/soc.0/f9824900.sdhci/by-name/misc ->
    - /dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor_a

Fix this by adding an internal map in FsManagerAvbOps to record the mapping
from partition name to its by-name symlink:

    ByNameSymlinkMap["vendor_a"] = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor_a"

Two overloaded factory methods are then provided for FsManagerAvbUniquePtr:
    - FsManagerAvbUniquePtr Open(ByNameSymlinkMap&& by_name_symlink_map):
      for first stage mount, where the by-name symlink map will be
      constructed externally, from the uevents processed by init, before
      invoking this factory method.

    - FsManagerAvbUniquePtr Open(const fstab& fstab): for normal mount,
      where the by-name symlink map will be constructed from the input fstab
      internally.

Bug: 37552224
Test: first stage mount /vendor with vboot 1.0
Test: first stage mount /vendor with vboot 2.0 (AVB)
Test: normal mount /vendor with vboot 2.0 (AVB)
Change-Id: Id17e8566da87ea22b8923fcd6e47db8d45bc7d6a
2017-05-09 11:03:49 +08:00
..
include first stage mount: removing the requirement of by-name prefix for AVB 2017-05-09 11:03:49 +08:00
.clang-format Fix-up coding style 2017-02-18 12:33:36 +08:00
Android.mk fs_mgr: make is_device_secure() work even in the absence of properties. 2017-02-27 12:46:18 -08:00
fs_mgr.cpp first stage mount: removing the requirement of by-name prefix for AVB 2017-05-09 11:03:49 +08:00
fs_mgr_avb.cpp first stage mount: removing the requirement of by-name prefix for AVB 2017-05-09 11:03:49 +08:00
fs_mgr_avb_ops.cpp first stage mount: removing the requirement of by-name prefix for AVB 2017-05-09 11:03:49 +08:00
fs_mgr_boot_config.cpp fs_mgr: remove the repetitive and annoying bootconfig error print 2017-04-20 14:41:23 -07:00
fs_mgr_dm_ioctl.cpp Fix-up coding style 2017-02-18 12:33:36 +08:00
fs_mgr_format.cpp fs_mgr: Switch to LOG()/PLOG() defined in <android-base/logging.h> 2017-01-26 21:47:55 +08:00
fs_mgr_fstab.cpp fs_mgr: adds/changes some public APIs for early mount in init 2017-04-13 18:29:10 +08:00
fs_mgr_main.cpp fs_mgr: Switch to LOG()/PLOG() defined in <android-base/logging.h> 2017-01-26 21:47:55 +08:00
fs_mgr_priv.h fs_mgr: support AVB in fs_mgr_update_verity_state() 2017-04-14 12:10:49 +08:00
fs_mgr_priv_avb_ops.h first stage mount: removing the requirement of by-name prefix for AVB 2017-05-09 11:03:49 +08:00
fs_mgr_priv_boot_config.h early_mount: fs_mgr: move all fstab logic into fs_mgr 2017-02-23 16:48:43 -08:00
fs_mgr_priv_dm_ioctl.h Fix-up coding style 2017-02-18 12:33:36 +08:00
fs_mgr_priv_sha.h fs_mgr_avb: refactors how vbmeta is loaded 2017-04-13 18:28:53 +08:00
fs_mgr_slotselect.cpp fs_mgr: adding fs_mgr_get_slot_suffix() public API 2017-04-13 18:28:48 +08:00
fs_mgr_verity.cpp fs_mgr: support AVB in fs_mgr_update_verity_state() 2017-04-14 12:10:49 +08:00