From 8459c40913d393bfb22ae8b2ef7d7daa05b653c1 Mon Sep 17 00:00:00 2001 From: Luis Hector Chavez Date: Tue, 19 Jun 2018 14:50:40 -0700 Subject: [PATCH] AOSP: e2fsdroid: Correctly process the root inode This change ensures that the root inode has the correct uid/gid by calling androidify_inode() on it. It also sets android_configure = 1 when the u/gid mapping is provided. Signed-off-by: Theodore Ts'o Google-Bug-Id: 78561186 Google-Bug-Id: 110415537 Test: $ m # With BOARD_SYSTEMIMAGE_UID_MAP=655360 0 5000 $ simg2img ${OUT}/{system.img,system.raw.img} $ mkdir tmp $ sudo mount -o loop ${OUT}/system.raw.img tmp $ stat --format="%u %g" tmp 655360 655360 Change-Id: I842a32b6d64439f9f16b9c6b66de20d4e4418aa8 From AOSP commit: ee3f0f37c34d68aa7a96a36dea369acae312772c --- contrib/android/e2fsdroid.c | 2 ++ contrib/android/perms.c | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/contrib/android/e2fsdroid.c b/contrib/android/e2fsdroid.c index 237df51..e784428 100644 --- a/contrib/android/e2fsdroid.c +++ b/contrib/android/e2fsdroid.c @@ -265,10 +265,12 @@ int main(int argc, char *argv[]) case 'u': if (!parse_ugid_map(optarg, &uid_map)) exit(EXIT_FAILURE); + android_configure = 1; break; case 'g': if (!parse_ugid_map(optarg, &gid_map)) exit(EXIT_FAILURE); + android_configure = 1; break; default: usage(EXIT_FAILURE); diff --git a/contrib/android/perms.c b/contrib/android/perms.c index 74ef4b8..746b94b 100644 --- a/contrib/android/perms.c +++ b/contrib/android/perms.c @@ -129,7 +129,12 @@ static errcode_t set_perms_and_caps(ext2_filsys fs, ext2_ino_t ino, /* Permissions */ if (params->fs_config_func != NULL) { - params->fs_config_func(params->filename, S_ISDIR(inode.i_mode), + const char *filename = params->filename; + if (strcmp(filename, params->mountpoint) == 0) { + /* The root of the filesystem needs to be an empty string. */ + filename = ""; + } + params->fs_config_func(filename, S_ISDIR(inode.i_mode), params->target_out, &uid, &gid, &imode, &capabilities); uid = resolve_ugid(params->uid_map, uid); @@ -299,10 +304,7 @@ errcode_t __android_configure_fs(ext2_filsys fs, char *src_dir, if (strlen(mountpoint) == 1 && mountpoint[0] == '/') params.path = ""; - retval = set_selinux_xattr(fs, EXT2_ROOT_INO, ¶ms); - if (retval) - return retval; - retval = set_timestamp(fs, EXT2_ROOT_INO, ¶ms); + retval = androidify_inode(fs, EXT2_ROOT_INO, ¶ms); if (retval) return retval; -- 1.8.3.1