diff --git a/init/first_stage_init.cpp b/init/first_stage_init.cpp index 78e5b60a1..84cda9860 100644 --- a/init/first_stage_init.cpp +++ b/init/first_stage_init.cpp @@ -329,10 +329,23 @@ int FirstStageMain(int argc, char** argv) { // If "/force_debuggable" is present, the second-stage init will use a userdebug // sepolicy and load adb_debug.prop to allow adb root, if the device is unlocked. + bool found_debuggable = false; + std::string adb_debug_prop("/adb_debug.prop"); + std::string userdebug_sepolicy("/userdebug_plat_sepolicy.cil"); if (access("/force_debuggable", F_OK) == 0) { + found_debuggable = true; + } else if (access("/first_stage_ramdisk/force_debuggable", F_OK) == 0) { + // Fallback to legacy debug resource paths. + // TODO(b/186485355): removes the fallback path once it is not needed. + found_debuggable = true; + adb_debug_prop.insert(0, "/first_stage_ramdisk"); + userdebug_sepolicy.insert(0, "/first_stage_ramdisk"); + } + + if (found_debuggable) { std::error_code ec; // to invoke the overloaded copy_file() that won't throw. - if (!fs::copy_file("/adb_debug.prop", kDebugRamdiskProp, ec) || - !fs::copy_file("/userdebug_plat_sepolicy.cil", kDebugRamdiskSEPolicy, ec)) { + if (!fs::copy_file(adb_debug_prop, kDebugRamdiskProp, ec) || + !fs::copy_file(userdebug_sepolicy, kDebugRamdiskSEPolicy, ec)) { LOG(ERROR) << "Failed to setup debug ramdisk"; } else { // setenv for second-stage init to read above kDebugRamdisk* files.