diff options
Diffstat (limited to 'fs_mgr')
-rw-r--r-- | fs_mgr/fs_mgr_verity.c | 13 | ||||
-rw-r--r-- | fs_mgr/include/fs_mgr.h | 14 |
2 files changed, 20 insertions, 7 deletions
diff --git a/fs_mgr/fs_mgr_verity.c b/fs_mgr/fs_mgr_verity.c index feb3c19..5c67333 100644 --- a/fs_mgr/fs_mgr_verity.c +++ b/fs_mgr/fs_mgr_verity.c @@ -591,7 +591,7 @@ out: return rc; } -int fs_mgr_update_verity_state() +int fs_mgr_update_verity_state(fs_mgr_verity_state_callback callback) { _Alignas(struct dm_ioctl) char buffer[DM_BUF_SIZE]; char fstab_filename[PROPERTY_VALUE_MAX + sizeof(FSTAB_PREFIX)]; @@ -645,7 +645,14 @@ int fs_mgr_update_verity_state() if (*status == 'C') { rc = write_verity_state(state_loc, offset, VERITY_MODE_LOGGING); - goto out; + + if (rc == -1) { + goto out; + } + } + + if (callback) { + callback(&fstab->recs[i], mount_point, *status); } } @@ -729,6 +736,8 @@ int fs_mgr_setup_verity(struct fstab_rec *fstab) { mode = VERITY_MODE_RESTART; /* default dm-verity mode */ } + INFO("Enabling dm-verity for %s (mode %d)\n", mount_point, mode); + // load the verity mapping table if (load_verity_table(io, mount_point, fstab->blk_device, fd, verity_table, mode) < 0) { diff --git a/fs_mgr/include/fs_mgr.h b/fs_mgr/include/fs_mgr.h index 0437d45..d2c8fff 100644 --- a/fs_mgr/include/fs_mgr.h +++ b/fs_mgr/include/fs_mgr.h @@ -27,6 +27,10 @@ // turn verity off in userdebug builds. #define VERITY_METADATA_MAGIC_DISABLE 0x46464f56 // "VOFF" +#ifdef __cplusplus +extern "C" { +#endif + // Verity modes enum verity_mode { VERITY_MODE_EIO = 0, @@ -35,10 +39,6 @@ enum verity_mode { VERITY_MODE_LAST = VERITY_MODE_RESTART }; -#ifdef __cplusplus -extern "C" { -#endif - /* * The entries must be kept in the same order as they were seen in the fstab. * Unless explicitly requested, a lookup on mount point should always @@ -66,6 +66,10 @@ struct fstab_rec { unsigned int zram_size; }; +// Callback function for verity status +typedef void (*fs_mgr_verity_state_callback)(struct fstab_rec *fstab, + const char *mount_point, int status); + struct fstab *fs_mgr_read_fstab(const char *fstab_path); void fs_mgr_free_fstab(struct fstab *fstab); @@ -84,7 +88,7 @@ int fs_mgr_unmount_all(struct fstab *fstab); int fs_mgr_get_crypt_info(struct fstab *fstab, char *key_loc, char *real_blk_device, int size); int fs_mgr_load_verity_state(int *mode); -int fs_mgr_update_verity_state(); +int fs_mgr_update_verity_state(fs_mgr_verity_state_callback callback); int fs_mgr_add_entry(struct fstab *fstab, const char *mount_point, const char *fs_type, const char *blk_device); |