Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8bb4441f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "resolve merge conflicts of 9795ff64 to master"

parents 86d5cee2 56033417
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -10,7 +10,7 @@ LOCAL_SRC_FILES := dumpstate.cpp utils.cpp


LOCAL_MODULE := dumpstate
LOCAL_MODULE := dumpstate


LOCAL_SHARED_LIBRARIES := libcutils liblog libselinux libbase
LOCAL_SHARED_LIBRARIES := libcutils liblog libselinux libbase libhardware_legacy
# ZipArchive support, the order matters here to get all symbols.
# ZipArchive support, the order matters here to get all symbols.
LOCAL_STATIC_LIBRARIES := libziparchive libz libcrypto_static
LOCAL_STATIC_LIBRARIES := libziparchive libz libcrypto_static
LOCAL_HAL_STATIC_LIBRARIES := libdumpstate
LOCAL_HAL_STATIC_LIBRARIES := libdumpstate
+33 −8
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@
#include <memory>
#include <memory>
#include <regex>
#include <regex>
#include <set>
#include <set>
#include <signal.h>
#include <stdbool.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
@@ -38,6 +39,7 @@
#include <android-base/unique_fd.h>
#include <android-base/unique_fd.h>
#include <android-base/file.h>
#include <android-base/file.h>
#include <cutils/properties.h>
#include <cutils/properties.h>
#include <hardware_legacy/power.h>


#include "private/android_filesystem_config.h"
#include "private/android_filesystem_config.h"


@@ -83,6 +85,7 @@ static bool dry_run = false;
#define TOMBSTONE_MAX_LEN (sizeof(TOMBSTONE_FILE_PREFIX) + 4)
#define TOMBSTONE_MAX_LEN (sizeof(TOMBSTONE_FILE_PREFIX) + 4)
#define NUM_TOMBSTONES  10
#define NUM_TOMBSTONES  10
#define WLUTIL "/vendor/xbin/wlutil"
#define WLUTIL "/vendor/xbin/wlutil"
#define WAKE_LOCK_NAME "dumpstate_wakelock"


typedef struct {
typedef struct {
  char name[TOMBSTONE_MAX_LEN];
  char name[TOMBSTONE_MAX_LEN];
@@ -1148,11 +1151,31 @@ static void usage() {
          VERSION_DEFAULT.c_str());
          VERSION_DEFAULT.c_str());
}
}


static void sigpipe_handler(int n) {
static void wake_lock_releaser() {
    // don't complain to stderr or stdout
    if (release_wake_lock(WAKE_LOCK_NAME) < 0) {
        MYLOGE("Failed to release wake lock: %s \n", strerror(errno));
    } else {
        MYLOGD("Wake lock released.\n");
    }
}

static void sig_handler(int signo) {
    wake_lock_releaser();
    _exit(EXIT_FAILURE);
    _exit(EXIT_FAILURE);
}
}


static void register_sig_handler() {
    struct sigaction sa;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sa.sa_handler = sig_handler;
    sigaction(SIGPIPE, &sa, NULL); // broken pipe
    sigaction(SIGSEGV, &sa, NULL); // segment fault
    sigaction(SIGINT, &sa, NULL); // ctrl-c
    sigaction(SIGTERM, &sa, NULL); // killed
    sigaction(SIGQUIT, &sa, NULL); // quit
}

/* adds the temporary report to the existing .zip file, closes the .zip file, and removes the
/* adds the temporary report to the existing .zip file, closes the .zip file, and removes the
   temporary file.
   temporary file.
 */
 */
@@ -1238,7 +1261,6 @@ static std::string SHA256_file_hash(std::string filepath) {
}
}


int main(int argc, char *argv[]) {
int main(int argc, char *argv[]) {
    struct sigaction sigact;
    int do_add_date = 0;
    int do_add_date = 0;
    int do_zip_file = 0;
    int do_zip_file = 0;
    int do_vibrate = 1;
    int do_vibrate = 1;
@@ -1255,6 +1277,14 @@ int main(int argc, char *argv[]) {


    MYLOGI("begin\n");
    MYLOGI("begin\n");


    if (acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_NAME) < 0) {
        MYLOGE("Failed to acquire wake lock: %s \n", strerror(errno));
    } else {
        MYLOGD("Wake lock acquired.\n");
        atexit(wake_lock_releaser);
        register_sig_handler();
    }

    dry_run = property_get_bool("dumpstate.dry_run", 0) != 0;
    dry_run = property_get_bool("dumpstate.dry_run", 0) != 0;
    if (is_dry_run()) {
    if (is_dry_run()) {
        MYLOGI("Running on dry-run mode (to disable it, call 'setprop dumpstate.dry_run false')\n");
        MYLOGI("Running on dry-run mode (to disable it, call 'setprop dumpstate.dry_run false')\n");
@@ -1275,11 +1305,6 @@ int main(int argc, char *argv[]) {
    property_set("dumpstate.last_id", last_id);
    property_set("dumpstate.last_id", last_id);
    MYLOGI("dumpstate id: %lu\n", id);
    MYLOGI("dumpstate id: %lu\n", id);


    /* clear SIGPIPE handler */
    memset(&sigact, 0, sizeof(sigact));
    sigact.sa_handler = sigpipe_handler;
    sigaction(SIGPIPE, &sigact, NULL);

    /* set as high priority, and protect from OOM killer */
    /* set as high priority, and protect from OOM killer */
    setpriority(PRIO_PROCESS, 0, -20);
    setpriority(PRIO_PROCESS, 0, -20);


+5 −3
Original line number Original line Diff line number Diff line
@@ -909,7 +909,7 @@ bool drop_root_user() {
    }
    }


    gid_t groups[] = { AID_LOG, AID_SDCARD_R, AID_SDCARD_RW,
    gid_t groups[] = { AID_LOG, AID_SDCARD_R, AID_SDCARD_RW,
            AID_MOUNT, AID_INET, AID_NET_BW_STATS, AID_READPROC };
            AID_MOUNT, AID_INET, AID_NET_BW_STATS, AID_READPROC, AID_WAKELOCK };
    if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) {
    if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) {
        MYLOGE("Unable to setgroups, aborting: %s\n", strerror(errno));
        MYLOGE("Unable to setgroups, aborting: %s\n", strerror(errno));
        return false;
        return false;
@@ -930,8 +930,10 @@ bool drop_root_user() {
    capheader.version = _LINUX_CAPABILITY_VERSION_3;
    capheader.version = _LINUX_CAPABILITY_VERSION_3;
    capheader.pid = 0;
    capheader.pid = 0;


    capdata[CAP_TO_INDEX(CAP_SYSLOG)].permitted = CAP_TO_MASK(CAP_SYSLOG);
    capdata[CAP_TO_INDEX(CAP_SYSLOG)].permitted =
    capdata[CAP_TO_INDEX(CAP_SYSLOG)].effective = CAP_TO_MASK(CAP_SYSLOG);
            (CAP_TO_MASK(CAP_SYSLOG) | CAP_TO_MASK(CAP_BLOCK_SUSPEND));
    capdata[CAP_TO_INDEX(CAP_SYSLOG)].effective =
            (CAP_TO_MASK(CAP_SYSLOG) | CAP_TO_MASK(CAP_BLOCK_SUSPEND));
    capdata[0].inheritable = 0;
    capdata[0].inheritable = 0;
    capdata[1].inheritable = 0;
    capdata[1].inheritable = 0;