Load build sysprops early

*/build.prop files are now loaded much earlier than before; from 'on
post-fs' to the time when the property service is started which is
before init starts the action loop.

This ensures that all processes that are launched by init have a
consistent view of system properties. Previously, the processes that
started before 'on post-fs' were initially with the small number of
sysprops loaded from */default.prop and then suddenly get additional
sysprops from */build.prop while they are executing.

Bug: 122714998
Test: device boots

Change-Id: Ic07528421dfbe8d4f43673cea41175d33cfbf298
This commit is contained in:
Jiyong Park 2019-01-13 02:42:31 +09:00
parent 91fa140312
commit 3b316ee201
4 changed files with 21 additions and 27 deletions

View file

@ -482,9 +482,8 @@ Commands
-f: force installation of the module even if the version of the running kernel
and the version of the kernel for which the module was compiled do not match.
`load_all_props`
> Loads properties from /system, /vendor, et cetera.
This is included in the default init.rc.
`load_system_props`
> (This action is deprecated and no-op.)
`load_persist_props`
> Loads persistent properties when /data has been decrypted.

View file

@ -972,7 +972,7 @@ static Result<Success> do_load_persist_props(const BuiltinArguments& args) {
}
static Result<Success> do_load_system_props(const BuiltinArguments& args) {
load_system_props();
LOG(INFO) << "deprecated action `load_system_props` called.";
return Success();
}

View file

@ -699,22 +699,6 @@ static void update_sys_usb_config() {
}
}
void property_load_boot_defaults() {
if (!load_properties_from_file("/system/etc/prop.default", NULL)) {
// Try recovery path
if (!load_properties_from_file("/prop.default", NULL)) {
// Try legacy path
load_properties_from_file("/default.prop", NULL);
}
}
load_properties_from_file("/product/build.prop", NULL);
load_properties_from_file("/product_services/build.prop", NULL);
load_properties_from_file("/odm/default.prop", NULL);
load_properties_from_file("/vendor/default.prop", NULL);
update_sys_usb_config();
}
static void load_override_properties() {
if (ALLOW_LOCAL_PROP_OVERRIDE) {
load_properties_from_file("/data/local.prop", NULL);
@ -779,12 +763,29 @@ void load_recovery_id_prop() {
close(fd);
}
void load_system_props() {
void property_load_boot_defaults() {
// TODO(b/117892318): merge prop.default and build.prop files into one
// TODO(b/122864654): read the prop files from all partitions and then
// resolve the duplication by their origin so that RO and non-RO properties
// have a consistent overriding order.
if (!load_properties_from_file("/system/etc/prop.default", NULL)) {
// Try recovery path
if (!load_properties_from_file("/prop.default", NULL)) {
// Try legacy path
load_properties_from_file("/default.prop", NULL);
}
}
load_properties_from_file("/product/build.prop", NULL);
load_properties_from_file("/product_services/build.prop", NULL);
load_properties_from_file("/odm/default.prop", NULL);
load_properties_from_file("/vendor/default.prop", NULL);
load_properties_from_file("/system/build.prop", NULL);
load_properties_from_file("/odm/build.prop", NULL);
load_properties_from_file("/vendor/build.prop", NULL);
load_properties_from_file("/factory/factory.prop", "ro.*");
load_recovery_id_prop();
update_sys_usb_config();
}
static int SelinuxAuditCallback(void* data, security_class_t /*cls*/, char* buf, size_t len) {

View file

@ -346,12 +346,6 @@ on late-init
trigger boot
on post-fs
# Load properties from
# /system/build.prop,
# /odm/build.prop,
# /vendor/build.prop and
# /factory/factory.prop
load_system_props
start vold
exec - system system -- /system/bin/vdc checkpoint markBootAttempt