Loading adb/adb.c +16 −3 Original line number Diff line number Diff line Loading @@ -859,8 +859,20 @@ int adb_main(int is_daemon) property_get("ro.kernel.qemu", value, ""); if (strcmp(value, "1") != 0) { property_get("ro.secure", value, ""); if (strcmp(value, "1") == 0) if (strcmp(value, "1") == 0) { // don't run as root if ro.secure is set... secure = 1; // ... except we allow running as root in userdebug builds if the // service.adb.root property has been set by the "adb root" command property_get("ro.debuggable", value, ""); if (strcmp(value, "1") == 0) { property_get("service.adb.root", value, ""); if (strcmp(value, "1") == 0) { secure = 0; } } } } /* don't listen on port 5037 if we are running in secure mode */ Loading @@ -872,8 +884,10 @@ int adb_main(int is_daemon) ** AID_INPUT to diagnose input issues (getevent) ** AID_INET to diagnose network issues (netcfg, ping) ** AID_GRAPHICS to access the frame buffer ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump) */ gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS }; gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS, AID_NET_BT, AID_NET_BT_ADMIN }; setgroups(sizeof(groups)/sizeof(groups[0]), groups); /* then switch user and group to "shell" */ Loading Loading @@ -1080,4 +1094,3 @@ int main(int argc, char **argv) return adb_main(0); #endif } adb/commandline.c +12 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,7 @@ void help() " adb get-serialno - prints: <serial-number>\n" " adb status-window - continuously print device status for a specified device\n" " adb remount - remounts the /system partition on the device read-write\n" " adb root - restarts adb with root permissions\n" "\n" "networking:\n" " adb ppp <tty> [parameters] - Run PPP over USB.\n" Loading Loading @@ -914,6 +915,17 @@ top: return 1; } if(!strcmp(argv[0], "root")) { int fd = adb_connect("root:"); if(fd >= 0) { read_and_dump(fd); adb_close(fd); return 0; } fprintf(stderr,"error: %s\n", adb_error()); return 1; } if(!strcmp(argv[0], "bugreport")) { if (argc != 1) { return 1; Loading adb/log_service.c +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ #include <fcntl.h> #include <errno.h> #include <sys/socket.h> #include <utils/logger.h> #include <cutils/logger.h> #include "sysdeps.h" #include "adb.h" Loading adb/services.c +30 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,34 @@ static void recover_service(int s, void *cookie) adb_close(fd); } void restart_root_service(int fd, void *cookie) { char buf[100]; char value[PROPERTY_VALUE_MAX]; if (getuid() == 0) { snprintf(buf, sizeof(buf), "adbd is already running as root\n"); writex(fd, buf, strlen(buf)); adb_close(fd); } else { property_get("ro.debuggable", value, ""); if (strcmp(value, "1") != 0) { snprintf(buf, sizeof(buf), "adbd cannot run as root in production builds\n"); writex(fd, buf, strlen(buf)); return; } property_set("service.adb.root", "1"); snprintf(buf, sizeof(buf), "restarting adbd as root\n"); writex(fd, buf, strlen(buf)); adb_close(fd); // quit, and init will restart us as root sleep(1); exit(1); } } #endif #if 0 Loading Loading @@ -289,6 +317,8 @@ int service_to_fd(const char *name) ret = create_service_thread(file_sync_service, NULL); } else if(!strncmp(name, "remount:", 8)) { ret = create_service_thread(remount_service, NULL); } else if(!strncmp(name, "root:", 5)) { ret = create_service_thread(restart_root_service, NULL); #endif #if 0 } else if(!strncmp(name, "echo:", 5)){ Loading adb/usb_linux.c +2 −1 Original line number Diff line number Diff line Loading @@ -292,7 +292,8 @@ static int find_usb_device(const char *base, } } register_device_callback(devname, local_ep_in, local_ep_out, i, serial, zero_mask); register_device_callback(devname, local_ep_in, local_ep_out, interface->bInterfaceNumber, serial, zero_mask); found_device = 1; break; Loading Loading
adb/adb.c +16 −3 Original line number Diff line number Diff line Loading @@ -859,8 +859,20 @@ int adb_main(int is_daemon) property_get("ro.kernel.qemu", value, ""); if (strcmp(value, "1") != 0) { property_get("ro.secure", value, ""); if (strcmp(value, "1") == 0) if (strcmp(value, "1") == 0) { // don't run as root if ro.secure is set... secure = 1; // ... except we allow running as root in userdebug builds if the // service.adb.root property has been set by the "adb root" command property_get("ro.debuggable", value, ""); if (strcmp(value, "1") == 0) { property_get("service.adb.root", value, ""); if (strcmp(value, "1") == 0) { secure = 0; } } } } /* don't listen on port 5037 if we are running in secure mode */ Loading @@ -872,8 +884,10 @@ int adb_main(int is_daemon) ** AID_INPUT to diagnose input issues (getevent) ** AID_INET to diagnose network issues (netcfg, ping) ** AID_GRAPHICS to access the frame buffer ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump) */ gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS }; gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS, AID_NET_BT, AID_NET_BT_ADMIN }; setgroups(sizeof(groups)/sizeof(groups[0]), groups); /* then switch user and group to "shell" */ Loading Loading @@ -1080,4 +1094,3 @@ int main(int argc, char **argv) return adb_main(0); #endif }
adb/commandline.c +12 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,7 @@ void help() " adb get-serialno - prints: <serial-number>\n" " adb status-window - continuously print device status for a specified device\n" " adb remount - remounts the /system partition on the device read-write\n" " adb root - restarts adb with root permissions\n" "\n" "networking:\n" " adb ppp <tty> [parameters] - Run PPP over USB.\n" Loading Loading @@ -914,6 +915,17 @@ top: return 1; } if(!strcmp(argv[0], "root")) { int fd = adb_connect("root:"); if(fd >= 0) { read_and_dump(fd); adb_close(fd); return 0; } fprintf(stderr,"error: %s\n", adb_error()); return 1; } if(!strcmp(argv[0], "bugreport")) { if (argc != 1) { return 1; Loading
adb/log_service.c +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ #include <fcntl.h> #include <errno.h> #include <sys/socket.h> #include <utils/logger.h> #include <cutils/logger.h> #include "sysdeps.h" #include "adb.h" Loading
adb/services.c +30 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,34 @@ static void recover_service(int s, void *cookie) adb_close(fd); } void restart_root_service(int fd, void *cookie) { char buf[100]; char value[PROPERTY_VALUE_MAX]; if (getuid() == 0) { snprintf(buf, sizeof(buf), "adbd is already running as root\n"); writex(fd, buf, strlen(buf)); adb_close(fd); } else { property_get("ro.debuggable", value, ""); if (strcmp(value, "1") != 0) { snprintf(buf, sizeof(buf), "adbd cannot run as root in production builds\n"); writex(fd, buf, strlen(buf)); return; } property_set("service.adb.root", "1"); snprintf(buf, sizeof(buf), "restarting adbd as root\n"); writex(fd, buf, strlen(buf)); adb_close(fd); // quit, and init will restart us as root sleep(1); exit(1); } } #endif #if 0 Loading Loading @@ -289,6 +317,8 @@ int service_to_fd(const char *name) ret = create_service_thread(file_sync_service, NULL); } else if(!strncmp(name, "remount:", 8)) { ret = create_service_thread(remount_service, NULL); } else if(!strncmp(name, "root:", 5)) { ret = create_service_thread(restart_root_service, NULL); #endif #if 0 } else if(!strncmp(name, "echo:", 5)){ Loading
adb/usb_linux.c +2 −1 Original line number Diff line number Diff line Loading @@ -292,7 +292,8 @@ static int find_usb_device(const char *base, } } register_device_callback(devname, local_ep_in, local_ep_out, i, serial, zero_mask); register_device_callback(devname, local_ep_in, local_ep_out, interface->bInterfaceNumber, serial, zero_mask); found_device = 1; break; Loading