diff options
author | Luis Hector Chavez <lhchavez@google.com> | 2018-06-19 14:50:40 -0700 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2018-06-23 23:18:48 -0400 |
commit | 8459c40913d393bfb22ae8b2ef7d7daa05b653c1 (patch) | |
tree | 4922723cdc441a756f3bb34b70fb986f21f2763a /contrib | |
parent | f0d1a5099c721374e93a7c562e76d1e97f3e2520 (diff) | |
download | e2fsprogs-8459c40913d393bfb22ae8b2ef7d7daa05b653c1.tar.gz |
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 <tytso@mit.edu>
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
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/android/e2fsdroid.c | 2 | ||||
-rw-r--r-- | 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 237df51f..e7844282 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 74ef4b88..746b94b2 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; |