Merge "fs_mgr: fix encryptable=footer support" am: b67fed557f am: 7f06a23414

am: aa0318c9e9

* commit 'aa0318c9e9b97b2644c7428313fbeec4f86d12fd':
  fs_mgr: fix encryptable=footer support

Change-Id: Ic8d662bd960a4e40f0a3073ff2442b5d1eb20d99
This commit is contained in:
Chuanxiao Dong 2016-06-07 17:03:02 +00:00 committed by android-build-merger
commit 8b1707ec3a
3 changed files with 14 additions and 5 deletions

View File

@ -574,6 +574,7 @@ int fs_mgr_mount_all(struct fstab *fstab)
/* mount(2) returned an error, handle the encryptable/formattable case */
bool wiped = partition_wiped(fstab->recs[top_idx].blk_device);
bool crypt_footer = false;
if (mret && mount_errno != EBUSY && mount_errno != EACCES &&
fs_mgr_is_formattable(&fstab->recs[top_idx]) && wiped) {
/* top_idx and attempted_idx point at the same partition, but sometimes
@ -594,8 +595,11 @@ int fs_mgr_mount_all(struct fstab *fstab)
ERROR("%s(): %s wouldn't open (%s)\n", __func__,
fstab->recs[top_idx].key_loc, strerror(errno));
}
} else if (fs_mgr_is_encryptable(&fstab->recs[top_idx]) &&
!strcmp(fstab->recs[top_idx].key_loc, KEY_IN_FOOTER)) {
crypt_footer = true;
}
if (fs_mgr_do_format(&fstab->recs[top_idx]) == 0) {
if (fs_mgr_do_format(&fstab->recs[top_idx], crypt_footer) == 0) {
/* Let's replay the mount actions. */
i = top_idx - 1;
continue;

View File

@ -32,11 +32,12 @@
#include "ext4.h"
#include "make_ext4fs.h"
#include "fs_mgr_priv.h"
#include "cryptfs.h"
extern struct fs_info info; /* magic global from ext4_utils */
extern void reset_ext4fs_info();
static int format_ext4(char *fs_blkdev, char *fs_mnt_point)
static int format_ext4(char *fs_blkdev, char *fs_mnt_point, bool crypt_footer)
{
uint64_t dev_sz;
int fd, rc = 0;
@ -63,6 +64,9 @@ static int format_ext4(char *fs_blkdev, char *fs_mnt_point)
/* Format the partition using the calculated length */
reset_ext4fs_info();
info.len = (off64_t)dev_sz;
if (crypt_footer) {
info.len -= CRYPT_FOOTER_OFFSET;
}
/* Use make_ext4fs_internal to avoid wiping an already-wiped partition. */
rc = make_ext4fs_internal(fd, NULL, NULL, fs_mnt_point, 0, 0, 0, 0, 0, 0, sehandle, 0, 0, NULL, NULL, NULL);
@ -118,7 +122,7 @@ static int format_f2fs(char *fs_blkdev)
return rc;
}
int fs_mgr_do_format(struct fstab_rec *fstab)
int fs_mgr_do_format(struct fstab_rec *fstab, bool crypt_footer)
{
int rc = -EINVAL;
@ -127,7 +131,7 @@ int fs_mgr_do_format(struct fstab_rec *fstab)
if (!strncmp(fstab->fs_type, "f2fs", 4)) {
rc = format_f2fs(fstab->blk_device);
} else if (!strncmp(fstab->fs_type, "ext4", 4)) {
rc = format_ext4(fstab->blk_device, fstab->mount_point);
rc = format_ext4(fstab->blk_device, fstab->mount_point, crypt_footer);
} else {
ERROR("File system type '%s' is not supported\n", fstab->fs_type);
}

View File

@ -18,6 +18,7 @@
#define __CORE_FS_MGR_H
#include <stdint.h>
#include <stdbool.h>
#include <linux/dm-ioctl.h>
// Magic number at start of verity metadata
@ -112,7 +113,7 @@ int fs_mgr_is_formattable(struct fstab_rec *fstab);
int fs_mgr_is_nofail(struct fstab_rec *fstab);
int fs_mgr_swapon_all(struct fstab *fstab);
int fs_mgr_do_format(struct fstab_rec *fstab);
int fs_mgr_do_format(struct fstab_rec *fstab, bool reserve_footer);
#ifdef __cplusplus
}