diff --git a/fs_mgr/Android.mk b/fs_mgr/Android.mk index d0d563066..7da3ca440 100644 --- a/fs_mgr/Android.mk +++ b/fs_mgr/Android.mk @@ -10,7 +10,8 @@ common_static_libraries := \ libcrypto_utils_static \ libcrypto_static \ libext4_utils_static \ - libsquashfs_utils + libsquashfs_utils \ + libselinux include $(CLEAR_VARS) LOCAL_CLANG := true diff --git a/fs_mgr/fs_mgr_format.c b/fs_mgr/fs_mgr_format.c index 0b52e0038..6c66f4718 100644 --- a/fs_mgr/fs_mgr_format.c +++ b/fs_mgr/fs_mgr_format.c @@ -23,6 +23,11 @@ #include #include #include + +#include +#include +#include + #include "ext4_utils.h" #include "ext4.h" #include "make_ext4fs.h" @@ -47,17 +52,29 @@ static int format_ext4(char *fs_blkdev, char *fs_mnt_point) return -1; } + struct selabel_handle *sehandle = selinux_android_file_context_handle(); + if (!sehandle) { + /* libselinux logs specific error */ + ERROR("Cannot initialize android file_contexts"); + close(fd); + return -1; + } + /* Format the partition using the calculated length */ reset_ext4fs_info(); info.len = (off64_t)dev_sz; /* 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, 0, 0, 0, NULL, NULL, NULL); + rc = make_ext4fs_internal(fd, NULL, NULL, fs_mnt_point, 0, 0, 0, 0, 0, 0, sehandle, 0, 0, NULL, NULL, NULL); if (rc) { ERROR("make_ext4fs returned %d.\n", rc); } close(fd); + if (sehandle) { + selabel_close(sehandle); + } + return rc; }