Commit Graph

414 Commits

Author SHA1 Message Date
Keun-young Park ab389288ad Merge "check ext4 magic before running next steps" am: 82bd278dc4 am: 9183d0701d
am: 8a8ac86cf6

Change-Id: I98e37f994cf08f92cada289f64dda9530c64b4f3
2017-04-15 00:35:39 +00:00
Keun-young Park 82bd278dc4 Merge "check ext4 magic before running next steps" 2017-04-15 00:26:32 +00:00
Bowgo Tsai 4d70aa5541 Merge changes from topic 'avb-early-mount' am: d7381375bb am: 04989a7a4b
am: 0b2d83a64b

Change-Id: I3911b1be010b7f79f2b3975a9264eb914044392f
2017-04-14 06:40:58 +00:00
Bowgo Tsai aaf70e77dc fs_mgr: support AVB in fs_mgr_update_verity_state()
fs_mgr_update_verity_state() is invoked by 'verity_update_state' in
init.rc. It will then set property "partition.system.verified" and
"partition.vendor.verified" to verify_mode. We should support this for
AVB as well.

Also change the order of static libs in init to fix the build error
after this change:
  system/extras/ext4_utils/ext4_crypt.cpp:69: error: undefined reference to 'property_get'

Bug: 35416769
Test: Mount /system and /vendor with vboot 2.0 (AVB), check the following properties exist.
      - [partition.system.verified]: [2]
      - [partition.vendor.verified]: [2]
Test: Mount /system and /vendor with vboot 1.0, check the following properties exist.
      - [partition.system.verified]: [0]
      - [partition.vendor.verified]: [0]

Change-Id: I4328d66a8cb93f26e7960e620a0b2292d5f15900
2017-04-14 12:10:49 +08:00
Bowgo Tsai 9ec99028d2 Merge "fs_mgr: adds/changes some public APIs for early mount in init" am: d9b45c5811 am: 951427906d
am: 947210be92

Change-Id: I377a388beaa8816b322d10e8fc033d702ba61397
2017-04-14 00:31:25 +00:00
Keun-young Park 6000a3f657 check ext4 magic before running next steps
- mount, e2fsck, tune2fs will all fail if magic number does not match.
- mismatch always happen for FDE and is wasting boot-up time to try
  all and fail always.
- skip mount steps if it has invalid magic number and do not record
  fs_stat either.
- For ext4 fs with corrupt superblock, e2fsck refuses to do anything if
  superblock magic is invalid. So simply running e2fsck does not help
  anyway.

bug: 36231950
Test: reboot ane check fs_mgr log from dmesg
Change-Id: I9ad9e0cd30fd074b3bbf8f450bd401b133d5771a
2017-04-13 17:11:11 -07:00
Bowgo Tsai 40ead9f41c Merge "fs_mgr_avb: refactors how vbmeta is loaded" am: fc500ddb52 am: a6db40c7cd
am: 0265f55b44

Change-Id: I4389b2d95fe1a7216e36422359311f23d6a0e768
2017-04-13 20:21:11 +00:00
Bowgo Tsai 08d996678c Merge "fs_mgr: adding fs_mgr_get_slot_suffix() public API" am: b26f48f135 am: 4c96971cee
am: e203dbb2f6

Change-Id: Icca6f2dac8c9bef0d3b1d0d2202371f3e101be19
2017-04-13 13:56:54 +00:00
Bowgo Tsai 80d1ad17ed fs_mgr: adds/changes some public APIs for early mount in init
Several changes in this CL:
  - Moves class FsManagerAvbHandle to public API
  - Adds a parameter 'wait_for_verity_dev' for FsManagerAvbHandle::SetUpAvb()
    to allow not to wait for verity device gets created
  - Adds FsManagerAvbHandle::AvbHashtreeDisabled() to query whether AVB is disabled
  - Adds fs_mgr_is_avb() to query whether a fstab_rec has MF_AVB flag

Bug: 33254008
Test: test AVB on bullhead
Change-Id: I89c43ca574ae632db8a700fc2590a1f80212c993
2017-04-13 18:29:10 +08:00
Bowgo Tsai 95c966a859 fs_mgr_avb: refactors how vbmeta is loaded
Adds two classes FsManagerAvbhandle and FsManagerAvbVerifier to replace the
following functions or struct:

    - fs_mgr_load_vbmeta_images() -> FsManagerAvbhandle::Open()
    - fs_mgr_unload_vbmeta_images() -> deleted
    - fs_mgr_setup_avb() -> FsManagerAvbhandle::SetUpAvb()

    - androidboot_vbmeta -> FsManagerAvbVerifier
    - load_vbmeta_prop() -> FsManagerAvbVerifier::Create()
    - verify_vbmeta_images() -> FsManagerAvbVerifier::VerifyVbmetaImages()

And only invokes FsManagerAvbhandle::Open() when there is a fstab entry having
'avb' flag (need HASHTREE descriptor). fs_mgr_is_avb_used() can be
removed as it only checks system property "ro.boot.vbmeta.hash_alg" to
decide whether vbmeta needs to be loaded, which might not be accurate.

For example, there are only HASH descriptors in the verified chain but
no HASHTREE descriptors. In this case, the fs_mgr doesn't have to do
anything because it only takes care of HASHTREE descriptors.

Also adds a new class FsManagerAvbOps to provide the C++ binding
FsManagerAvbOps::AvbSlotVerify() for libavb->avb_slot_verify().

Bug: 33254008
Test: test AVB on bullhead
Change-Id: I8fe15ba01c277152630a2a5c1c5c7f25fbf34030
2017-04-13 18:28:53 +08:00
Bowgo Tsai 87d0836cda fs_mgr: adding fs_mgr_get_slot_suffix() public API
The function returns "_a" or "_b" based on two possible values in
kernel cmdline:

  - androidboot.slot = a or b OR
  - androidboot.slot_suffix = _a or _b

Bug: 33254008
Bug: 36533366
Test: boot sailfish
Change-Id: Ia0a524e4145ebf61af5821f42ecad212c95ed748
2017-04-13 18:28:48 +08:00
Keun-young Park 9550ff43d3 Merge "use s_max_mnt_count to detect mke2fs generated partition" am: 2e3abe2d05 am: 1dc9738730
am: 493c2cd50f

Change-Id: I328b2e9f893fddde6ff5f4b8e2b5e8b2cae4c6c4
2017-04-12 08:06:49 +00:00
Keun-young Park 95e233f9ff use s_max_mnt_count to detect mke2fs generated partition
- Old tool will set it to 10 while mke2fs will set it to -1.
- For now, only tag it.
- TODO: possibly add different policy per image tool version.

bug: 32246772
Test: check dmesg after reboot
Change-Id: Ib763f8ba64957412d2b02a9d6e3fc2bfcf55851e
2017-04-11 17:55:14 -07:00
Bowgo Tsai c131341a03 Merge "fs_mgr: removing fs_mgr_read_fstab_with_dt()" am: 53108b269e am: 5a5017c07c
am: da5a7a585b

Change-Id: I384384973a92385108dfa797127452f3df0f122e
2017-04-01 03:14:58 +00:00
Treehugger Robot 53108b269e Merge "fs_mgr: removing fs_mgr_read_fstab_with_dt()" 2017-04-01 03:05:25 +00:00
Bowgo Tsai a739e16825 Merge "fs_mgr_avb_ops: stores the by-name prefix of /misc instead of fstab struct" am: 5c4af9698c am: 474897035d
am: cecfaff6cd

Change-Id: I6fb0fd462385bef975515740ed1ebb948fbba35d
2017-03-31 04:40:07 +00:00
Bowgo Tsai 2437532331 Merge "fs_mgr_avb: allow top-level vbmeta struct to be in 'boot' partition" am: 2e0f8a3b13 am: ec10a51d7d
am: 1c7f528f4e

Change-Id: Idd0ebe9ad12c622732e29dc2b4747bd2b5c78602
2017-03-31 03:54:56 +00:00
Bowgo Tsai f5bbfd64a9 fs_mgr_avb_ops: stores the by-name prefix of /misc instead of fstab struct
fs_mgr_avb_ops->read_from_partition() relies on the by-name prefix to
get the device file when reading a partition. Previously we store the
fstab struct and use fs_mgr_get_entry_for_mount_point() for every read.

It's better to do that once and store the by-name prefix for later use.

Bug: 33254008
Test: test AVB on bullhead
Change-Id: Ie999851b529f984e29ccbf39fb52a8220056fe0c
2017-03-31 10:25:04 +08:00
Bowgo Tsai 37a0b318ef fs_mgr_avb: allow top-level vbmeta struct to be in 'boot' partition
get_hashtree_descriptor() currently restricts HASHTREE descriptor to be
either in /vbmeta or in the same partition for dm-verity setup.

Also allows it to be from /boot partition because the top-level vbmeta
might be appended at /boot in legacy devices without /vbmeta.

Bug: 35880930
Test: test AVB on bullhead with top-level vbmeta being at /boot
Change-Id: I1ebd16a3c9f17bced6055146e8843b5918a737eb
2017-03-30 20:37:12 +08:00
Bowgo Tsai acc1c3c792 fs_mgr: removing fs_mgr_read_fstab_with_dt()
Currently there is no client requires fs_mgr_read_fstab_with_dt() so
remove this API. Devices with fstab entries in device tree should use
fs_mgr_read_fstab_default() to get default fstab, or just use
fs_mgr_read_fstab_dt() to get those in device tree.

Bug: 35811655
Test: normal boot sailfish
Test: run factory data reset in sailfish
Test: recovery boot sailfish
Test: adb sideload in sailfish

Change-Id: I1579d81cea7366cf3867cfe5ad56feb36cbb7246
2017-03-29 16:25:03 +08:00
Bowgo Tsai 207a9fcec9 Merge "fs_mgr: change the log level in fs_mgr_get_boot_config()" am: c8c3e61eeb am: c30261f266
am: 73d9e8e938

Change-Id: I3b0caeda0d9b9ecf2aeb1592463c55e8480adf69
2017-03-28 15:59:49 +00:00
Bowgo Tsai 0f34094a17 fs_mgr: change the log level in fs_mgr_get_boot_config()
fs_mgr might try to get a non-existing config through fs_mgr_get_boot_config()
on a device (e.g., for backward compatibility). Lower the log level to INFO
so it won't appear on the recovery screen.

Bug: 35811655
Test: recovery boot sailfish
Change-Id: I81497259aff3691740170abeef932d363b52be35
2017-03-28 18:52:04 +08:00
Bowgo Tsai 9b83226871 Merge "fs_mgr_avb: allow top-level vbmeta struct to be in 'boot' partition" am: ea057b46e0 am: 75ada5fce3
am: f6b7adb464

Change-Id: I375d5a1129253d9c08e6b57039487f094bf3dd42
2017-03-28 00:43:24 +00:00
Treehugger Robot ea057b46e0 Merge "fs_mgr_avb: allow top-level vbmeta struct to be in 'boot' partition" 2017-03-28 00:28:33 +00:00
Tao Bao 9d3760e3b3 Merge "fs_mgr: use different fstab paths for normal/recovery boot" am: 9c59029add am: 07052c0509
am: 4ba8d8b5bf

Change-Id: Id3b713b7d132bc1e500a24aa79598350868470d3
2017-03-27 19:37:12 +00:00
Tao Bao 9c59029add Merge "fs_mgr: use different fstab paths for normal/recovery boot" 2017-03-27 19:23:12 +00:00
Bowgo Tsai d05a2f7dcb fs_mgr: use different fstab paths for normal/recovery boot
recovery boot: /etc/recovery.fstab
  normal boot: use the first one found by the order:
               /odm/etc/fstab.{hardware} ->
               /vendor/etc/fstab.{hardware} ->
               /fstab.{hardware}

Bug: 35811655
Bug: 36637553

Test: Sideload OTA installation in sailfish
Change-Id: I3e260e077afa5a37fb65246246c824e9379e68c8
2017-03-28 01:34:28 +08:00
Bowgo Tsai 3286a6fe73 Merge "fs_mgr_avb: fix return value check of fs_mgr_get_boot_config()" am: 51da2aaa36 am: eb0a5e7e26
am: 07fb5bf7f0

Change-Id: I6d4888f2c376f9d7f24f592bb1c4898a3ea04fb8
2017-03-27 17:19:56 +00:00
Bowgo Tsai 97db0809f4 fs_mgr_avb: fix return value check of fs_mgr_get_boot_config()
fs_mgr_get_boot_config() returns true/false but the return value check
in current fs_mgr_avb is for 0/1. This was introduced during a refactoring.

Check true/false for the return value.

Bug: 33254008
Test: manual test AVB on bullhead
Change-Id: I72c366627214df4a99c4d9cf1eb577e94f7afb31
2017-03-27 22:33:21 +08:00
Bowgo Tsai b016896c98 fs_mgr_avb: allow top-level vbmeta struct to be in 'boot' partition
avb_ops->read_from_partition() should return
AVB_IO_RESULT_ERROR_NO_SUCH_PARTITION if the requested partition does
not exist. Then libavb will try to load top-level vbmeta from /boot partition.

Two related changes in external/avb:

  https://android-review.googlesource.com/#/c/344907/
  https://android-review.googlesource.com/#/c/348731/

Bug: 35880930
Test: test AVB on bullhead with top-level vbmeta being at /boot
Change-Id: I80355ba5ae4d29a6f102714cd2f7c2550b238f27
2017-03-27 21:35:06 +08:00
Fernando Lugo 189bbbfe36 Merge "fs_mgr: update to new androidboot.slot param" am: 0fc8a4b363 am: 64bf462eb9
am: cefc9134f8

Change-Id: I64bc926c5f12221ddd3b9ccc39e5d4d612c57dd1
2017-03-24 23:37:42 +00:00
Fernando Lugo 9c7ae587c2 fs_mgr: update to new androidboot.slot param
androidboot.slot_suffix is being deprecated for a androidboot.slot.
Bootloader must pass slot used to boot into the androidboot.slot which
does not include the '_' character

Test: boot android
Bug: 36533366
Change-Id: I6137bd08418f67a88120c8609eda10b2ada4607d
Signed-off-by: Fernando Lugo <flugo@google.com>
2017-03-24 23:28:55 +00:00
Fernando Lugo 9e0c682e61 Merge changes I0ad349f2,I0f528cf1 am: 27a091d4a1 am: 69482cc127
am: 89573b397d

Change-Id: Id087881d88f87e2b31a77aab6f818118c04c25c6
2017-03-23 17:01:12 +00:00
Fernando Lugo ce9d7db979 fs_mgr: allow using legacy A/B suffix
Right now all platforms supporting A/B have not fixed
androidboot.slot_suffix kernel command line parameter. To avoid breaking
all those platform allow using legacy support bootloaders get fixed.

Bug: 36533366
Test: boot
Change-Id: I0ad349f262d0b7f4897f3e184cb053b1440b2d5b
Signed-off-by: Fernando Lugo <flugo@google.com>
2017-03-22 19:22:25 -07:00
Fernando Lugo d1dcedd3fb fs_mgr: adapt to new A/B support
In the new A/B partition support suffixes don't have "_". So, fix fs_mgr
code that assumes it has "_"

Bug: 36533366
Test: boot
Change-Id: I0f528cf1e8fecacb1b4ae34f6dc42e18ebe777bb
Signed-off-by: Fernando Lugo <flugo@google.com>
2017-03-22 19:21:56 -07:00
Mark Salyzyn cfcc1dfa93 Merge "fs_mgr: remove private/android_filesystem_config.h" am: f5ee213a5c am: ba9d88ebab
am: 8f9a187785

Change-Id: Ib9cbcd36021cc80202f04162a4aa555142a46ea6
2017-03-21 15:28:57 +00:00
Mark Salyzyn e989a22553 fs_mgr: remove private/android_filesystem_config.h
Test: compile
Bug: 33241851
Change-Id: I3807871dcdfe5c751b1eea6e57c1ff5aac15806e
2017-03-20 14:30:48 -07:00
bowgotsai 5353833a21 Merge "fs_mgr: change the log level in fs_mgr_read_fstab_dt()" am: b280bb210b am: d141190210
am: 82bcc7b0ea

Change-Id: I39a1c5757596071b1d4f10cc9ca6c91c265139d9
2017-03-17 02:21:58 +00:00
bowgotsai 172c1d8b6e fs_mgr: change the log level in fs_mgr_read_fstab_dt()
Devices having no early mount enabled won't have fstab in device tree.
Lower the log level to INFO when fstab is absent there.

Bug: 35811655
Test: boot into recovery mode in a device without fstab in dt
Change-Id: I4b1e0e6554f50b8118770d00aa8f54be86aca858
2017-03-16 10:25:39 +09:00
NIEJuhu cc9d94ce04 Merge "fs_mgr: fix errno setted by mount_with_alternatives" am: 488525b47b am: 21a33342af
am: 56c920aed9

Change-Id: I12fea4ae42c6c7071355911d968432ce5d4e07ee
2017-03-12 03:38:37 +00:00
Treehugger Robot 488525b47b Merge "fs_mgr: fix errno setted by mount_with_alternatives" 2017-03-12 03:27:14 +00:00
NIEJuhu 5c31ffe9cd fs_mgr: fix errno setted by mount_with_alternatives
mount_with_alternatives should set errno to match the 1st mount failure.

Bug: N/A
Test: run `fs_mgr -a <fake_fstab>` and check dmesg log
Change-Id: If4148d327f75c659b843e95f85568ea49c5d0180
Signed-off-by: NIEJuhu <niejuhu@xiaomi.com>
2017-03-10 08:36:11 +00:00
Bowgo Tsai eeea724900 Merge changes from topic 'fstab_relocation' am: ac13718d0a am: 8f7125fbee
am: 9fc983315a

Change-Id: Ic62c46c160e9995ff11067300ec5c831301bceb9
2017-03-10 03:17:50 +00:00
Bowgo Tsai 46c6dc1a6f fs_mgr: support reading fstab file from /odm or /vendor partition
fstab contains device- and soc- specific content that should reside in
/odm or /vendor partition. This change searches the fstab.${ro.hardware}
file from /odm/etc, /vendor/etc and /, then use the first one found.

Bug: 35811655
Test: boot sailfish
Change-Id: I82f89b41a849faedb64072a7cfc52d7424e1aaa1
2017-03-09 22:35:54 +08:00
Bowgo Tsai 47d342739a fs_mgr: add fs_mgr_read_fstab_with_dt() API
With the early mount support in init, fstab entries of verified partitions
(e.g., /system, /vendor) will be moved into device tree in kernel image.

Those early mount fstab entries will be removed from the fstab file to
prevent duplicated and/or inconsistent settings.

This change adds a new function: fs_mgr_read_fstab_with_dt(), to return
the combined results from both places. It also removes
fs_mgr_read_fstab_file() from the public APIs and makes it as an
internal function.

Bug: 35811655
Test: early mount /vendor with dm-verity on sailfish

Change-Id: I2fba3614685bf9f852a789cda6f53013e2164e60
2017-03-09 21:15:08 +08:00
Keun-young Park 19761b8ea7 Merge "collect fs stat for ext4" am: 5811a434fc am: f3fcb883b2
am: 820d28b3e2

Change-Id: I90f95321b133305a16e3abe0fc3885992e99d890
2017-03-07 19:37:40 +00:00
Keun-young Park 3fbf94e19a collect fs stat for ext4
- This is to collect data to understand if e2fsck -f option
  can be dropped wholly based on information from fs.
- Ideally e2fsck should not fix fs if it was clean shutdown
  or if it is not enabling quota.
- The log is added to /dev/fscklogs/log and other system components
  can collect it later.

TODO: add mechanism to distinguish old vs new fs generation tool.

bug: 32246772
Test: reboot and check saved logs under different shutdown conditions (clean, non-clean)

Change-Id: Id00fad4c5f8ebbb9f9908164a1026e415df06721
2017-03-06 19:39:58 -08:00
Bowgo Tsai 8789cd5292 Merge "fs_mgr: allow disable dm-verity when the device is unlocked without metadata" am: 17c84b2cca am: 63b22a3eb1
am: 944c9f667c

Change-Id: I905f5d7be07fa77f8846edec56eef9a1fb298296
2017-03-06 19:13:18 +00:00
Bowgo Tsai 7ad3159db9 fs_mgr: allow disable dm-verity when the device is unlocked without metadata
To start Treble VTS test, a single AOSP system.img will be flashed onto
the device. The size of AOSP system.img might be different than the
system partition size on device, making locating verity metadata fail
(at the last fixed size of the partition).

This change allows disabling dm-verity on system partition when the
device is unlocked (orange device state) with invalid metadata.

BUG: 35603549

Test: Boot bullhead with a different-sized system.img, checks verity is
      not enabled via:

          "adb shell getprop | grep partition.system.verified"

Change-Id: Id89d023e82c78ff1902ab7a528431cf7f65e49ad
2017-03-06 16:04:03 +08:00
Sandeep Patil 23e7f86d36 Merge "fs_mgr: make is_device_secure() work even in the absence of properties." am: 0026f1e693 am: 5cdbcbbcbf
am: 8207bd8486

Change-Id: Idb8fb584b38914d1c510737716e1eff6e70b0f65
2017-02-27 22:49:11 +00:00