auto import from //branches/cupcake_rel/...@138607
This commit is contained in:
parent
2015549667
commit
e037fd7e19
14
adb/adb.c
14
adb/adb.c
|
@ -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 */
|
||||
|
|
|
@ -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"
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
@ -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)){
|
||||
|
|
|
@ -69,6 +69,7 @@ struct {
|
|||
{ "dhcp.", AID_DHCP },
|
||||
{ "debug.", AID_SHELL },
|
||||
{ "log.", AID_SHELL },
|
||||
{ "service.adb.root", AID_SHELL },
|
||||
{ "persist.sys.", AID_SYSTEM },
|
||||
{ "persist.service.", AID_SYSTEM },
|
||||
{ NULL, 0 }
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define INITIAL_CAPACITY (4)
|
||||
#define MAX_CAPACITY ((int)(UINT_MAX/sizeof(void*)))
|
||||
|
||||
struct Array {
|
||||
void** contents;
|
||||
|
@ -45,13 +47,26 @@ void arrayFree(Array* array) {
|
|||
static int ensureCapacity(Array* array, int capacity) {
|
||||
int oldCapacity = array->capacity;
|
||||
if (capacity > oldCapacity) {
|
||||
int newCapacity = (oldCapacity == 0) ? INITIAL_CAPACITY : oldCapacity * 2;
|
||||
|
||||
// Keep doubling capacity until we surpass necessary capacity.
|
||||
int newCapacity = (oldCapacity == 0) ? INITIAL_CAPACITY : oldCapacity;
|
||||
|
||||
// Ensure we're not doing something nasty
|
||||
if (capacity > MAX_CAPACITY)
|
||||
return -1;
|
||||
|
||||
// Keep doubling capacity until we surpass necessary capacity.
|
||||
while (newCapacity < capacity) {
|
||||
newCapacity *= 2;
|
||||
int newCap = newCapacity*2;
|
||||
// Handle integer overflows
|
||||
if (newCap < newCapacity || newCap > MAX_CAPACITY) {
|
||||
newCap = MAX_CAPACITY;
|
||||
}
|
||||
newCapacity = newCap;
|
||||
}
|
||||
|
||||
|
||||
// Should not happen, but better be safe than sorry
|
||||
if (newCapacity < 0 || newCapacity > MAX_CAPACITY)
|
||||
return -1;
|
||||
|
||||
void** newContents;
|
||||
if (array->contents == NULL) {
|
||||
// Allocate new array.
|
||||
|
@ -151,5 +166,5 @@ int arraySize(Array* array) {
|
|||
}
|
||||
|
||||
const void** arrayUnwrap(Array* array) {
|
||||
return array->contents;
|
||||
return (const void**)array->contents;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <cutils/jstring.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
|
||||
/* See http://www.unicode.org/reports/tr22/ for discussion
|
||||
* on invalid sequences
|
||||
|
@ -48,6 +49,10 @@ extern char16_t * strdup8to16 (const char* s, size_t *out_len)
|
|||
|
||||
len = strlen8to16(s);
|
||||
|
||||
// fail on overflow
|
||||
if (len && SIZE_MAX/len < sizeof(char16_t))
|
||||
return NULL;
|
||||
|
||||
// no plus-one here. UTF-16 strings are not null terminated
|
||||
ret = (char16_t *) malloc (sizeof(char16_t) * len);
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ on boot
|
|||
write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15
|
||||
|
||||
write /proc/sys/vm/overcommit_memory 1
|
||||
write /proc/sys/vm/min_free_order_shift 2
|
||||
write /proc/sys/vm/min_free_order_shift 4
|
||||
write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,4096,5120,5632,6144
|
||||
|
||||
# Set init its forked children's oom_adj.
|
||||
|
|
|
@ -107,8 +107,8 @@ int blkdev_refresh(blkdev_t *blk)
|
|||
blk->nr_parts = 0;
|
||||
|
||||
if ((block[0x1fe] != 0x55) || (block[0x1ff] != 0xAA)) {
|
||||
LOG_VOL("Disk %d:%d does not contain a partition table",
|
||||
blk->major, blk->minor);
|
||||
LOGI("Disk %d:%d does not contain a partition table",
|
||||
blk->major, blk->minor);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -120,10 +120,10 @@ int blkdev_refresh(blkdev_t *blk)
|
|||
struct fat_boot_sector *fb = (struct fat_boot_sector *) &block[0];
|
||||
|
||||
if (!i && fb->reserved && fb->fats && fat_valid_media(fb->media)) {
|
||||
LOG_VOL("Detected FAT filesystem in partition table");
|
||||
LOGI("Detected FAT filesystem in partition table");
|
||||
break;
|
||||
} else {
|
||||
LOG_VOL("Partition table looks corrupt");
|
||||
LOGI("Partition table looks corrupt");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ int blkdev_refresh(blkdev_t *blk)
|
|||
sprintf(tmp2, " type 0x%x", blk->part_type);
|
||||
|
||||
strcat(tmp, tmp2);
|
||||
LOG_VOL(tmp);
|
||||
LOGI(tmp);
|
||||
|
||||
close(fd);
|
||||
|
||||
|
|
|
@ -114,10 +114,8 @@ int media_add_blkdev(media_t *card, blkdev_t *dev)
|
|||
{
|
||||
blkdev_list_t *list_entry;
|
||||
|
||||
if (!(list_entry = malloc(sizeof(blkdev_list_t)))) {
|
||||
LOGE("Out of memory");
|
||||
if (!(list_entry = malloc(sizeof(blkdev_list_t))))
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
list_entry->next = NULL;
|
||||
list_entry->dev = dev;
|
||||
|
|
|
@ -248,7 +248,6 @@ static int handle_powersupply_event(struct uevent *event)
|
|||
low_batt = true;
|
||||
else
|
||||
low_batt = false;
|
||||
LOG_VOL("handle_powersupply_event(): low_batt = %d, door_open = %d", low_batt, door_open);
|
||||
volmgr_safe_mode(low_batt || door_open);
|
||||
}
|
||||
return 0;
|
||||
|
@ -272,7 +271,6 @@ static int handle_switch_event(struct uevent *event)
|
|||
door_open = true;
|
||||
else
|
||||
door_open = false;
|
||||
LOG_VOL("handle_powersupply_event(): low_batt = %d, door_open = %d", low_batt, door_open);
|
||||
volmgr_safe_mode(low_batt || door_open);
|
||||
} else
|
||||
LOG_VOL("handle_switch_event(): Ignoring switch '%s'", name);
|
||||
|
@ -351,7 +349,7 @@ static int handle_block_event(struct uevent *event)
|
|||
return rc;
|
||||
}
|
||||
|
||||
LOG_VOL("New blkdev %d.%d on media %s, media path %s, Dpp %d",
|
||||
LOGI("New blkdev %d.%d on media %s, media path %s, Dpp %d",
|
||||
blkdev->major, blkdev->minor, media->name, mediapath,
|
||||
blkdev_get_num_pending_partitions(blkdev->disk));
|
||||
|
||||
|
@ -365,7 +363,7 @@ static int handle_block_event(struct uevent *event)
|
|||
if (!(blkdev = blkdev_lookup_by_devno(maj, min)))
|
||||
return 0;
|
||||
|
||||
LOG_VOL("Destroying blkdev %d.%d @ %s on media %s", blkdev->major,
|
||||
LOGI("Destroying blkdev %d.%d @ %s on media %s", blkdev->major,
|
||||
blkdev->minor, blkdev->devpath, media->name);
|
||||
volmgr_notify_eject(blkdev, _cb_blkdev_ok_to_destroy);
|
||||
|
||||
|
@ -373,7 +371,7 @@ static int handle_block_event(struct uevent *event)
|
|||
if (!(blkdev = blkdev_lookup_by_devno(maj, min)))
|
||||
return 0;
|
||||
|
||||
LOG_VOL("Modified blkdev %d.%d @ %s on media %s", blkdev->major,
|
||||
LOGI("Modified blkdev %d.%d @ %s on media %s", blkdev->major,
|
||||
blkdev->minor, blkdev->devpath, media->name);
|
||||
|
||||
blkdev_refresh(blkdev);
|
||||
|
@ -420,7 +418,7 @@ static int handle_mmc_event(struct uevent *event)
|
|||
LOGE("Unable to allocate new media (%m)");
|
||||
return -1;
|
||||
}
|
||||
LOG_VOL("New MMC card '%s' (serial %u) added @ %s", media->name,
|
||||
LOGI("New MMC card '%s' (serial %u) added @ %s", media->name,
|
||||
media->serial, media->devpath);
|
||||
} else if (event->action == action_remove) {
|
||||
media_t *media;
|
||||
|
@ -430,7 +428,7 @@ static int handle_mmc_event(struct uevent *event)
|
|||
return -1;
|
||||
}
|
||||
|
||||
LOG_VOL("MMC card '%s' (serial %u) @ %s removed", media->name,
|
||||
LOGI("MMC card '%s' (serial %u) @ %s removed", media->name,
|
||||
media->serial, media->devpath);
|
||||
media_destroy(media);
|
||||
} else {
|
||||
|
|
|
@ -60,7 +60,7 @@ int main(int argc, char **argv)
|
|||
struct sockaddr_nl nladdr;
|
||||
int uevent_sz = 64 * 1024;
|
||||
|
||||
LOG_VOL("Android Volume Daemon version %d.%d", ver_major, ver_minor);
|
||||
LOGI("Android Volume Daemon version %d.%d", ver_major, ver_minor);
|
||||
|
||||
/*
|
||||
* Create all the various sockets we'll need
|
||||
|
@ -208,7 +208,7 @@ int send_msg(char* message)
|
|||
|
||||
pthread_mutex_lock(&write_mutex);
|
||||
|
||||
LOG_VOL("send_msg(%s):", message);
|
||||
// LOG_VOL("send_msg(%s):", message);
|
||||
|
||||
if (fw_sock >= 0)
|
||||
result = write(fw_sock, message, strlen(message) + 1);
|
||||
|
|
|
@ -205,7 +205,7 @@ int volmgr_bootstrap(void)
|
|||
volume_t *v = vol_root;
|
||||
while (v) {
|
||||
if (_mountpoint_mounted(v->mount_point)) {
|
||||
LOG_VOL("Volume '%s' already mounted at startup", v->mount_point);
|
||||
LOGW("Volume '%s' already mounted at startup", v->mount_point);
|
||||
v->state = volstate_mounted;
|
||||
}
|
||||
v = v->next;
|
||||
|
@ -229,7 +229,7 @@ int volmgr_safe_mode(boolean enable)
|
|||
if (v->state == volstate_mounted && v->fs) {
|
||||
rc = v->fs->mount_fn(v->dev, v, safe_mode);
|
||||
if (!rc) {
|
||||
LOG_VOL("Safe mode %s on %s", (enable ? "enabled" : "disabled"), v->mount_point);
|
||||
LOGI("Safe mode %s on %s", (enable ? "enabled" : "disabled"), v->mount_point);
|
||||
} else {
|
||||
LOGE("Failed to %s safe-mode on %s (%s)",
|
||||
(enable ? "enable" : "disable" ), v->mount_point, strerror(-rc));
|
||||
|
@ -555,7 +555,7 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev)
|
|||
|
||||
}
|
||||
|
||||
LOG_VOL("Evaluating dev '%s' for mountable filesystems for '%s'",
|
||||
LOGI("Evaluating dev '%s' for mountable filesystems for '%s'",
|
||||
dev->devpath, vol->mount_point);
|
||||
|
||||
if (dev->nr_parts == 0) {
|
||||
|
@ -642,7 +642,7 @@ static void *volmgr_reaper_thread(void *arg)
|
|||
actions.sa_handler = volmgr_reaper_thread_sighandler;
|
||||
sigaction(SIGUSR1, &actions, NULL);
|
||||
|
||||
LOG_VOL("Reaper here - working on %s", vol->mount_point);
|
||||
LOGW("Reaper here - working on %s", vol->mount_point);
|
||||
|
||||
boolean send_sig_kill = false;
|
||||
int i, rc;
|
||||
|
@ -650,7 +650,7 @@ static void *volmgr_reaper_thread(void *arg)
|
|||
for (i = 0; i < 10; i++) {
|
||||
errno = 0;
|
||||
rc = umount(vol->mount_point);
|
||||
LOG_VOL("volmngr reaper umount(%s) attempt %d (%s)",
|
||||
LOGW("volmngr reaper umount(%s) attempt %d (%s)",
|
||||
vol->mount_point, i + 1, strerror(errno));
|
||||
if (!rc)
|
||||
break;
|
||||
|
@ -667,7 +667,7 @@ static void *volmgr_reaper_thread(void *arg)
|
|||
}
|
||||
|
||||
if (!rc) {
|
||||
LOG_VOL("Reaper sucessfully unmounted %s", vol->mount_point);
|
||||
LOGI("Reaper sucessfully unmounted %s", vol->mount_point);
|
||||
vol->fs = NULL;
|
||||
volume_setstate(vol, volstate_unmounted);
|
||||
} else {
|
||||
|
@ -687,7 +687,7 @@ static void volmgr_uncage_reaper(volume_t *vol, void (* cb) (volume_t *, void *a
|
|||
if (vol->worker_running) {
|
||||
LOGE("Worker thread is currently running.. waiting..");
|
||||
pthread_mutex_lock(&vol->worker_sem);
|
||||
LOG_VOL("Worker thread now available");
|
||||
LOGI("Worker thread now available");
|
||||
}
|
||||
|
||||
vol->worker_args.reaper_args.cb = cb;
|
||||
|
@ -716,7 +716,7 @@ static int volmgr_stop_volume(volume_t *v, void (*cb) (volume_t *, void *), void
|
|||
break;
|
||||
}
|
||||
|
||||
LOG_VOL("volmngr quick stop umount(%s) attempt %d (%s)",
|
||||
LOGI("volmngr quick stop umount(%s) attempt %d (%s)",
|
||||
v->mount_point, i + 1, strerror(errno));
|
||||
|
||||
if (i == 0)
|
||||
|
@ -726,7 +726,7 @@ static int volmgr_stop_volume(volume_t *v, void (*cb) (volume_t *, void *), void
|
|||
}
|
||||
|
||||
if (!rc) {
|
||||
LOG_VOL("volmgr_stop_volume(%s): Volume unmounted sucessfully",
|
||||
LOGI("volmgr_stop_volume(%s): Volume unmounted sucessfully",
|
||||
v->mount_point);
|
||||
if (emit_statechange)
|
||||
volume_setstate(v, volstate_unmounted);
|
||||
|
@ -738,7 +738,7 @@ static int volmgr_stop_volume(volume_t *v, void (*cb) (volume_t *, void *), void
|
|||
* Since the volume is still in use, dispatch the stopping to
|
||||
* a thread
|
||||
*/
|
||||
LOG_VOL("Volume %s is busy (%d) - uncaging the reaper", v->mount_point, rc);
|
||||
LOGW("Volume %s is busy (%d) - uncaging the reaper", v->mount_point, rc);
|
||||
volmgr_uncage_reaper(v, cb, arg);
|
||||
return -EINPROGRESS;
|
||||
} else if (v->state == volstate_checking) {
|
||||
|
@ -1061,7 +1061,7 @@ static int volmgr_start_fs(struct volmgr_fstable_entry *fs, volume_t *vol, blkde
|
|||
if (vol->worker_running) {
|
||||
LOGE("Worker thread is currently running.. waiting..");
|
||||
pthread_mutex_lock(&vol->worker_sem);
|
||||
LOG_VOL("Worker thread now available");
|
||||
LOGI("Worker thread now available");
|
||||
}
|
||||
|
||||
vol->dev = dev;
|
||||
|
@ -1132,7 +1132,7 @@ static void *volmgr_start_fs_thread(void *arg)
|
|||
rc = fs->check_fn(dev);
|
||||
pthread_mutex_lock(&vol->lock);
|
||||
if (vol->state != volstate_checking) {
|
||||
LOG_VOL("filesystem check aborted");
|
||||
LOGE("filesystem check aborted");
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1146,14 +1146,14 @@ static void *volmgr_start_fs_thread(void *arg)
|
|||
goto out_unmountable;
|
||||
}
|
||||
#if DEBUG_VOLMGR
|
||||
LOG_VOL("%s filesystem check of %d:%d OK", fs->name,
|
||||
LOGI("%s filesystem check of %d:%d OK", fs->name,
|
||||
dev->major, dev->minor);
|
||||
#endif
|
||||
}
|
||||
|
||||
rc = fs->mount_fn(dev, vol, safe_mode);
|
||||
if (!rc) {
|
||||
LOG_VOL("Sucessfully mounted %s filesystem %d:%d on %s (safe-mode %s)",
|
||||
LOGI("Sucessfully mounted %s filesystem %d:%d on %s (safe-mode %s)",
|
||||
fs->name, dev->major, dev->minor, vol->mount_point,
|
||||
(safe_mode ? "on" : "off"));
|
||||
vol->fs = fs;
|
||||
|
|
|
@ -107,8 +107,6 @@ int vfat_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
|
|||
|
||||
flags = MS_NODEV | MS_NOEXEC | MS_NOSUID | MS_DIRSYNC;
|
||||
|
||||
if (safe_mode)
|
||||
flags |= MS_SYNCHRONOUS;
|
||||
if (vol->state == volstate_mounted) {
|
||||
LOG_VOL("Remounting %d:%d on %s, safe mode %d", dev->major,
|
||||
dev->minor, vol->mount_point, safe_mode);
|
||||
|
|
Loading…
Reference in New Issue