Mark fs-verity support for ext4 userdata if first_api_level >= R

fs-verity is required for new devices launched with R. This change
remove a manual setup for vendors going forward. The original fs mgr
flag still allows old devices to opt in, which can only to be done
manually because of kernel dependency.

Test: build
Bug: 150034150
Change-Id: I152b63d7889153d41f29677f72074afb1881b65d
This commit is contained in:
Victor Hsieh 2020-02-24 16:02:32 -08:00
parent 7445a87101
commit 98296fcf2a

View file

@ -30,6 +30,7 @@
#include <android-base/file.h>
#include <android-base/parseint.h>
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <libgsi/libgsi.h>
@ -659,6 +660,21 @@ void TransformFstabForDsu(Fstab* fstab, const std::vector<std::string>& dsu_part
}
}
void EnableMandatoryFlags(Fstab* fstab) {
// Devices launched in R and after should enable fs_verity on userdata. The flag causes tune2fs
// to enable the feature. A better alternative would be to enable on mkfs at the beginning.
if (android::base::GetIntProperty("ro.product.first_api_level", 0) >= 30) {
std::vector<FstabEntry*> data_entries = GetEntriesForMountPoint(fstab, "/data");
for (auto&& entry : data_entries) {
// Besides ext4, f2fs is also supported. But the image is already created with verity
// turned on when it was first introduced.
if (entry->fs_type == "ext4") {
entry->fs_mgr_flags.fs_verity = true;
}
}
}
}
bool ReadFstabFromFile(const std::string& path, Fstab* fstab) {
auto fstab_file = std::unique_ptr<FILE, decltype(&fclose)>{fopen(path.c_str(), "re"), fclose};
if (!fstab_file) {
@ -679,6 +695,7 @@ bool ReadFstabFromFile(const std::string& path, Fstab* fstab) {
}
SkipMountingPartitions(fstab);
EnableMandatoryFlags(fstab);
return true;
}