Start adbd in user mode if bootloader is unlocked

During automatic tests, we sometimes want to reboot the device out of
the rescue party remotely. And per http://go/recovery-adb-access, one
option is to start adbd in user build if the device has an unlocked
bootloader. This should not add more surface of attack. Because verified
boot is off with the unlocked bootloader, and the user can always flash
a custom recovery image that always starts adbd.

Bug: 141247819
Test: check adbd doesn't start in user build, unlock bootloader, and
check adbd starts.

Change-Id: I851746245f862cb4dfb01e6c3ad035f2c9f9ccec
This commit is contained in:
Tianjie Xu 2019-10-29 21:44:39 -07:00
parent 0d76cad830
commit 7d5c341962
2 changed files with 11 additions and 1 deletions

View file

@ -99,6 +99,10 @@ on property:service.adb.root=1
on fs && property:ro.debuggable=1
setprop sys.usb.config adb
# Also start adbd on user build with an unlocked bootloader
on fs && property:ro.debuggable=0 && androidboot.verifiedbootstate=orange
setprop sys.usb.config adb
on fs && property:sys.usb.configfs=1
mount configfs none /config
mkdir /config/usb_gadget/g1 0770 shell shell

View file

@ -69,6 +69,10 @@ static bool IsRoDebuggable() {
return android::base::GetBoolProperty("ro.debuggable", false);
}
static bool IsDeviceUnlocked() {
return "orange" == android::base::GetProperty("ro.boot.verifiedbootstate", "");
}
static void UiLogger(android::base::LogId /* id */, android::base::LogSeverity severity,
const char* /* tag */, const char* /* file */, unsigned int /* line */,
const char* message) {
@ -463,7 +467,9 @@ int main(int argc, char** argv) {
listener_thread.detach();
while (true) {
std::string usb_config = fastboot ? "fastboot" : IsRoDebuggable() ? "adb" : "none";
// We start adbd in recovery for the device with userdebug build or a unlocked bootloader.
std::string usb_config =
fastboot ? "fastboot" : IsRoDebuggable() || IsDeviceUnlocked() ? "adb" : "none";
std::string usb_state = android::base::GetProperty("sys.usb.state", "none");
if (usb_config != usb_state) {
if (!SetUsbConfig("none")) {