diff options
31 files changed, 163 insertions, 127 deletions
diff --git a/adb/daemon/file_sync_service.cpp b/adb/daemon/file_sync_service.cpp index 8c39a20fa..d55096aa8 100644 --- a/adb/daemon/file_sync_service.cpp +++ b/adb/daemon/file_sync_service.cpp @@ -32,6 +32,10 @@ #include <unistd.h> #include <utime.h> +#include <memory> +#include <string> +#include <vector> + #include <android-base/file.h> #include <android-base/stringprintf.h> #include <android-base/strings.h> @@ -47,6 +51,7 @@ #include "security_log_tags.h" #include "sysdeps/errno.h" +using android::base::Dirname; using android::base::StringPrintf; static bool should_use_fs_config(const std::string& path) { @@ -219,7 +224,7 @@ static bool handle_send_file(int s, const char* path, uid_t uid, gid_t gid, uint } if (fd < 0 && errno == ENOENT) { - if (!secure_mkdirs(android::base::Dirname(path))) { + if (!secure_mkdirs(Dirname(path))) { SendSyncFailErrno(s, "secure_mkdirs failed"); goto fail; } @@ -327,8 +332,6 @@ extern bool handle_send_link(int s, const std::string& path, std::vector<char>& #else static bool handle_send_link(int s, const std::string& path, std::vector<char>& buffer) { syncmsg msg; - unsigned int len; - int ret; if (!ReadFdExactly(s, &msg.data, sizeof(msg.data))) return false; @@ -337,24 +340,28 @@ static bool handle_send_link(int s, const std::string& path, std::vector<char>& return false; } - len = msg.data.size; + unsigned int len = msg.data.size; if (len > buffer.size()) { // TODO: resize buffer? SendSyncFail(s, "oversize data message"); return false; } if (!ReadFdExactly(s, &buffer[0], len)) return false; - ret = symlink(&buffer[0], path.c_str()); - if (ret && errno == ENOENT) { - if (!secure_mkdirs(android::base::Dirname(path))) { - SendSyncFailErrno(s, "secure_mkdirs failed"); + std::string buf_link; + if (!android::base::Readlink(path, &buf_link) || (buf_link != &buffer[0])) { + adb_unlink(path.c_str()); + auto ret = symlink(&buffer[0], path.c_str()); + if (ret && errno == ENOENT) { + if (!secure_mkdirs(Dirname(path))) { + SendSyncFailErrno(s, "secure_mkdirs failed"); + return false; + } + ret = symlink(&buffer[0], path.c_str()); + } + if (ret) { + SendSyncFailErrno(s, "symlink failed"); return false; } - ret = symlink(&buffer[0], path.c_str()); - } - if (ret) { - SendSyncFailErrno(s, "symlink failed"); - return false; } if (!ReadFdExactly(s, &msg.data, sizeof(msg.data))) return false; @@ -391,7 +398,8 @@ static bool do_send(int s, const std::string& spec, std::vector<char>& buffer) { // Don't delete files before copying if they are not "regular" or symlinks. struct stat st; - bool do_unlink = (lstat(path.c_str(), &st) == -1) || S_ISREG(st.st_mode) || S_ISLNK(st.st_mode); + bool do_unlink = (lstat(path.c_str(), &st) == -1) || S_ISREG(st.st_mode) || + (S_ISLNK(st.st_mode) && !S_ISLNK(mode)); if (do_unlink) { adb_unlink(path.c_str()); } diff --git a/base/include/android-base/parseint.h b/base/include/android-base/parseint.h index 9444fddf0..be8b97b78 100644 --- a/base/include/android-base/parseint.h +++ b/base/include/android-base/parseint.h @@ -22,6 +22,7 @@ #include <limits> #include <string> +#include <type_traits> namespace android { namespace base { @@ -33,6 +34,7 @@ namespace base { template <typename T> bool ParseUint(const char* s, T* out, T max = std::numeric_limits<T>::max(), bool allow_suffixes = false) { + static_assert(std::is_unsigned<T>::value, "ParseUint can only be used with unsigned types"); while (isspace(*s)) { s++; } @@ -96,6 +98,7 @@ template <typename T> bool ParseInt(const char* s, T* out, T min = std::numeric_limits<T>::min(), T max = std::numeric_limits<T>::max()) { + static_assert(std::is_signed<T>::value, "ParseInt can only be used with signed types"); while (isspace(*s)) { s++; } diff --git a/fastboot/device/commands.cpp b/fastboot/device/commands.cpp index 3f663ef8e..d5ea6db68 100644 --- a/fastboot/device/commands.cpp +++ b/fastboot/device/commands.cpp @@ -131,6 +131,11 @@ bool EraseHandler(FastbootDevice* device, const std::vector<std::string>& args) if (args.size() < 2) { return device->WriteStatus(FastbootResult::FAIL, "Invalid arguments"); } + + if (GetDeviceLockStatus()) { + return device->WriteStatus(FastbootResult::FAIL, "Erase is not allowed on locked devices"); + } + PartitionHandle handle; if (!OpenPartition(device, args[1], &handle)) { return device->WriteStatus(FastbootResult::FAIL, "Partition doesn't exist"); @@ -163,9 +168,15 @@ bool DownloadHandler(FastbootDevice* device, const std::vector<std::string>& arg if (args.size() < 2) { return device->WriteStatus(FastbootResult::FAIL, "size argument unspecified"); } + + if (GetDeviceLockStatus()) { + return device->WriteStatus(FastbootResult::FAIL, + "Download is not allowed on locked devices"); + } + // arg[0] is the command name, arg[1] contains size of data to be downloaded unsigned int size; - if (!android::base::ParseUint("0x" + args[1], &size, UINT_MAX)) { + if (!android::base::ParseUint("0x" + args[1], &size, kMaxDownloadSizeDefault)) { return device->WriteStatus(FastbootResult::FAIL, "Invalid size"); } device->download_data().resize(size); @@ -203,6 +214,11 @@ bool SetActiveHandler(FastbootDevice* device, const std::vector<std::string>& ar return device->WriteStatus(FastbootResult::FAIL, "Missing slot argument"); } + if (GetDeviceLockStatus()) { + return device->WriteStatus(FastbootResult::FAIL, + "set_active command is not allowed on locked devices"); + } + // Slot suffix needs to be between 'a' and 'z'. Slot slot; if (!GetSlotNumber(args[1], &slot)) { diff --git a/fastboot/device/commands.h b/fastboot/device/commands.h index 9df43a90c..bb1f988c3 100644 --- a/fastboot/device/commands.h +++ b/fastboot/device/commands.h @@ -19,6 +19,8 @@ #include <string> #include <vector> +constexpr unsigned int kMaxDownloadSizeDefault = 0x20000000; + class FastbootDevice; enum class FastbootResult { diff --git a/fastboot/device/utility.cpp b/fastboot/device/utility.cpp index 528abec49..b844b9f0a 100644 --- a/fastboot/device/utility.cpp +++ b/fastboot/device/utility.cpp @@ -23,6 +23,7 @@ #include <android-base/file.h> #include <android-base/logging.h> +#include <android-base/strings.h> #include <fs_mgr.h> #include <fs_mgr_dm_linear.h> #include <liblp/liblp.h> @@ -82,6 +83,10 @@ bool OpenPartition(FastbootDevice* device, const std::string& name, PartitionHan } std::optional<std::string> FindPhysicalPartition(const std::string& name) { + // Check for an invalid file name + if (android::base::StartsWith(name, "../") || name.find("/../") != std::string::npos) { + return {}; + } std::string path = "/dev/block/by-name/" + name; if (access(path.c_str(), W_OK) < 0) { return {}; @@ -164,6 +169,9 @@ std::vector<std::string> ListPartitions(FastbootDevice* device) { bool GetDeviceLockStatus() { std::string cmdline; - android::base::ReadFileToString("/proc/cmdline", &cmdline); + // Return lock status true if unable to read kernel command line. + if (!android::base::ReadFileToString("/proc/cmdline", &cmdline)) { + return true; + } return cmdline.find("androidboot.verifiedbootstate=orange") == std::string::npos; } diff --git a/fastboot/device/variables.cpp b/fastboot/device/variables.cpp index 25042c9d6..cbd2856dc 100644 --- a/fastboot/device/variables.cpp +++ b/fastboot/device/variables.cpp @@ -36,7 +36,6 @@ using ::android::hardware::fastboot::V1_0::FileSystemType; using ::android::hardware::fastboot::V1_0::Result; using ::android::hardware::fastboot::V1_0::Status; -constexpr int kMaxDownloadSizeDefault = 0x20000000; constexpr char kFastbootProtocolVersion[] = "0.4"; bool GetVersion(FastbootDevice* /* device */, const std::vector<std::string>& /* args */, @@ -289,7 +288,7 @@ bool GetPartitionSize(FastbootDevice* device, const std::vector<std::string>& ar bool is_zero_length; if (LogicalPartitionExists(args[0], device->GetCurrentSlot(), &is_zero_length) && is_zero_length) { - *message = "0"; + *message = "0x0"; return true; } // Otherwise, open the partition as normal. diff --git a/fastboot/fuzzy_fastboot/main.cpp b/fastboot/fuzzy_fastboot/main.cpp index e2076f5bb..c02ab1c0a 100644 --- a/fastboot/fuzzy_fastboot/main.cpp +++ b/fastboot/fuzzy_fastboot/main.cpp @@ -43,6 +43,7 @@ #include <thread> #include <vector> +#include <android-base/parseint.h> #include <android-base/stringprintf.h> #include <gtest/gtest.h> #include <sparse/sparse.h> @@ -331,8 +332,9 @@ TEST_F(Conformance, PartitionInfo) { << cmd + " responded with a string with leading whitespace"; EXPECT_FALSE(resp.compare(0, 2, "0x")) << cmd + "responded with a string that does not start with 0x..."; - int64_t size = strtoll(resp.c_str(), nullptr, 16); - EXPECT_GT(size, 0) << "'" + resp + "' is not a valid response from " + cmd; + uint64_t size; + ASSERT_TRUE(android::base::ParseUint(resp, &size)) + << "'" + resp + "' is not a valid response from " + cmd; } } diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp index 3ab9732a6..7f9d9a43a 100644 --- a/fs_mgr/fs_mgr.cpp +++ b/fs_mgr/fs_mgr.cpp @@ -37,6 +37,7 @@ #include <memory> #include <string> #include <thread> +#include <utility> #include <vector> #include <android-base/file.h> @@ -1500,16 +1501,17 @@ bool fs_mgr_update_verity_state(std::function<fs_mgr_verity_state_callback> call bool system_root = android::base::GetProperty("ro.build.system_root_image", "") == "true"; for (int i = 0; i < fstab->num_entries; i++) { - if (!fs_mgr_is_verified(&fstab->recs[i]) && !fs_mgr_is_avb(&fstab->recs[i])) { + auto fsrec = &fstab->recs[i]; + if (!fs_mgr_is_verified(fsrec) && !fs_mgr_is_avb(fsrec)) { continue; } std::string mount_point; - if (system_root && !strcmp(fstab->recs[i].mount_point, "/")) { + if (system_root && !strcmp(fsrec->mount_point, "/")) { // In AVB, the dm device name is vroot instead of system. - mount_point = fs_mgr_is_avb(&fstab->recs[i]) ? "vroot" : "system"; + mount_point = fs_mgr_is_avb(fsrec) ? "vroot" : "system"; } else { - mount_point = basename(fstab->recs[i].mount_point); + mount_point = basename(fsrec->mount_point); } if (dm.GetState(mount_point) == DmDeviceState::INVALID) { @@ -1517,15 +1519,14 @@ bool fs_mgr_update_verity_state(std::function<fs_mgr_verity_state_callback> call continue; } - const char* status = nullptr; + const char* status; std::vector<DeviceMapper::TargetInfo> table; if (!dm.GetTableStatus(mount_point, &table) || table.empty() || table[0].data.empty()) { - if (fstab->recs[i].fs_mgr_flags & MF_VERIFYATBOOT) { - status = "V"; - } else { - PERROR << "Failed to query DM_TABLE_STATUS for " << mount_point.c_str(); + if (!fs_mgr_is_verifyatboot(fsrec)) { + PERROR << "Failed to query DM_TABLE_STATUS for " << mount_point; continue; } + status = "V"; } else { status = table[0].data.c_str(); } @@ -1535,7 +1536,7 @@ bool fs_mgr_update_verity_state(std::function<fs_mgr_verity_state_callback> call // instead of [partition.vroot.verified]. if (mount_point == "vroot") mount_point = "system"; if (*status == 'C' || *status == 'V') { - callback(&fstab->recs[i], mount_point.c_str(), mode, *status); + callback(fsrec, mount_point.c_str(), mode, *status); } } diff --git a/gatekeeperd/IGateKeeperService.cpp b/gatekeeperd/IGateKeeperService.cpp index 1c339f4c8..43d57088d 100644 --- a/gatekeeperd/IGateKeeperService.cpp +++ b/gatekeeperd/IGateKeeperService.cpp @@ -70,7 +70,7 @@ status_t BnGateKeeperService::onTransact( } else { reply->writeInt32(GATEKEEPER_RESPONSE_ERROR); } - return NO_ERROR; + return OK; } case VERIFY: { CHECK_INTERFACE(IGateKeeperService, data, reply); @@ -102,7 +102,7 @@ status_t BnGateKeeperService::onTransact( } else { reply->writeInt32(GATEKEEPER_RESPONSE_ERROR); } - return NO_ERROR; + return OK; } case VERIFY_CHALLENGE: { CHECK_INTERFACE(IGateKeeperService, data, reply); @@ -141,7 +141,7 @@ status_t BnGateKeeperService::onTransact( } else { reply->writeInt32(GATEKEEPER_RESPONSE_ERROR); } - return NO_ERROR; + return OK; } case GET_SECURE_USER_ID: { CHECK_INTERFACE(IGateKeeperService, data, reply); @@ -149,20 +149,20 @@ status_t BnGateKeeperService::onTransact( uint64_t sid = getSecureUserId(uid); reply->writeNoException(); reply->writeInt64(sid); - return NO_ERROR; + return OK; } case CLEAR_SECURE_USER_ID: { CHECK_INTERFACE(IGateKeeperService, data, reply); uint32_t uid = data.readInt32(); clearSecureUserId(uid); reply->writeNoException(); - return NO_ERROR; + return OK; } case REPORT_DEVICE_SETUP_COMPLETE: { CHECK_INTERFACE(IGateKeeperService, data, reply); reportDeviceSetupComplete(); reply->writeNoException(); - return NO_ERROR; + return OK; } default: return BBinder::onTransact(code, data, reply, flags); diff --git a/gatekeeperd/gatekeeperd.cpp b/gatekeeperd/gatekeeperd.cpp index 5f3ce3610..f2818f3ba 100644 --- a/gatekeeperd/gatekeeperd.cpp +++ b/gatekeeperd/gatekeeperd.cpp @@ -386,7 +386,7 @@ public: write(fd, result, strlen(result) + 1); } - return NO_ERROR; + return OK; } private: diff --git a/healthd/BatteryMonitor.cpp b/healthd/BatteryMonitor.cpp index 80c5afe0d..2a5667c37 100644 --- a/healthd/BatteryMonitor.cpp +++ b/healthd/BatteryMonitor.cpp @@ -357,7 +357,7 @@ status_t BatteryMonitor::getProperty(int id, struct BatteryProperty *val) { if (!mHealthdConfig->batteryChargeCounterPath.isEmpty()) { val->valueInt64 = getIntField(mHealthdConfig->batteryChargeCounterPath); - ret = NO_ERROR; + ret = OK; } else { ret = NAME_NOT_FOUND; } @@ -367,7 +367,7 @@ status_t BatteryMonitor::getProperty(int id, struct BatteryProperty *val) { if (!mHealthdConfig->batteryCurrentNowPath.isEmpty()) { val->valueInt64 = getIntField(mHealthdConfig->batteryCurrentNowPath); - ret = NO_ERROR; + ret = OK; } else { ret = NAME_NOT_FOUND; } @@ -377,7 +377,7 @@ status_t BatteryMonitor::getProperty(int id, struct BatteryProperty *val) { if (!mHealthdConfig->batteryCurrentAvgPath.isEmpty()) { val->valueInt64 = getIntField(mHealthdConfig->batteryCurrentAvgPath); - ret = NO_ERROR; + ret = OK; } else { ret = NAME_NOT_FOUND; } @@ -387,7 +387,7 @@ status_t BatteryMonitor::getProperty(int id, struct BatteryProperty *val) { if (!mHealthdConfig->batteryCapacityPath.isEmpty()) { val->valueInt64 = getIntField(mHealthdConfig->batteryCapacityPath); - ret = NO_ERROR; + ret = OK; } else { ret = NAME_NOT_FOUND; } @@ -403,7 +403,7 @@ status_t BatteryMonitor::getProperty(int id, struct BatteryProperty *val) { case BATTERY_PROP_BATTERY_STATUS: val->valueInt64 = getChargeStatus(); - ret = NO_ERROR; + ret = OK; break; default: diff --git a/init/reboot.cpp b/init/reboot.cpp index 866f40e61..d4763369f 100644 --- a/init/reboot.cpp +++ b/init/reboot.cpp @@ -307,15 +307,14 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str auto shutdown_timeout = 0ms; if (!SHUTDOWN_ZERO_TIMEOUT) { - if (is_thermal_shutdown) { - constexpr unsigned int thermal_shutdown_timeout = 1; - shutdown_timeout = std::chrono::seconds(thermal_shutdown_timeout); - } else { - constexpr unsigned int shutdown_timeout_default = 6; - auto shutdown_timeout_property = android::base::GetUintProperty( - "ro.build.shutdown_timeout", shutdown_timeout_default); - shutdown_timeout = std::chrono::seconds(shutdown_timeout_property); + constexpr unsigned int shutdown_timeout_default = 6; + constexpr unsigned int max_thermal_shutdown_timeout = 3; + auto shutdown_timeout_final = android::base::GetUintProperty("ro.build.shutdown_timeout", + shutdown_timeout_default); + if (is_thermal_shutdown && shutdown_timeout_final > max_thermal_shutdown_timeout) { + shutdown_timeout_final = max_thermal_shutdown_timeout; } + shutdown_timeout = std::chrono::seconds(shutdown_timeout_final); } LOG(INFO) << "Shutdown timeout: " << shutdown_timeout.count() << " ms"; diff --git a/libcutils/include/private/android_filesystem_config.h b/libcutils/include/private/android_filesystem_config.h index 3be8ad0ea..845c586ec 100644 --- a/libcutils/include/private/android_filesystem_config.h +++ b/libcutils/include/private/android_filesystem_config.h @@ -131,6 +131,7 @@ #define AID_SECURE_ELEMENT 1068 /* secure element subsystem */ #define AID_LMKD 1069 /* low memory killer daemon */ #define AID_LLKD 1070 /* live lock daemon */ +#define AID_IORAPD 1071 /* input/output readahead and pin daemon */ /* Changes to this file must be made in AOSP, *not* in internal branches. */ #define AID_SHELL 2000 /* adb and debug shell user */ diff --git a/libcutils/partition_utils.cpp b/libcutils/partition_utils.cpp index 6735d6cc8..2211ff6ad 100644 --- a/libcutils/partition_utils.cpp +++ b/libcutils/partition_utils.cpp @@ -25,7 +25,7 @@ #include <cutils/properties.h> -static int only_one_char(char *buf, int len, char c) +static int only_one_char(uint8_t *buf, int len, uint8_t c) { int i, ret; @@ -41,7 +41,7 @@ static int only_one_char(char *buf, int len, char c) int partition_wiped(char *source) { - char buf[4096]; + uint8_t buf[4096]; int fd, ret; if ((fd = open(source, O_RDONLY)) < 0) { diff --git a/libpixelflinger/codeflinger/ARMAssembler.cpp b/libpixelflinger/codeflinger/ARMAssembler.cpp index ac009a9be..f47b6e42a 100644 --- a/libpixelflinger/codeflinger/ARMAssembler.cpp +++ b/libpixelflinger/codeflinger/ARMAssembler.cpp @@ -171,7 +171,7 @@ int ARMAssembler::generate(const char* name) } mAssembly->resize( int(pc()-base())*4 ); - + // the instruction cache is flushed by CodeCache const int64_t duration = ggl_system_time() - mDuration; const char * const format = "generated %s (%d ins) at [%p:%p] in %lld ns\n"; @@ -183,8 +183,8 @@ int ARMAssembler::generate(const char* name) printf(format, name, int(pc()-base()), base(), pc(), duration); disassemble(name); } - - return NO_ERROR; + + return OK; } uint32_t* ARMAssembler::pcForLabel(const char* label) @@ -213,14 +213,14 @@ void ARMAssembler::dataProcessing(int opcode, int cc, // multiply... void ARMAssembler::MLA(int cc, int s, int Rd, int Rm, int Rs, int Rn) { - if (Rd == Rm) { int t = Rm; Rm=Rs; Rs=t; } + if (Rd == Rm) { int t = Rm; Rm=Rs; Rs=t; } LOG_FATAL_IF(Rd==Rm, "MLA(r%u,r%u,r%u,r%u)", Rd,Rm,Rs,Rn); *mPC++ = (cc<<28) | (1<<21) | (s<<20) | (Rd<<16) | (Rn<<12) | (Rs<<8) | 0x90 | Rm; } void ARMAssembler::MUL(int cc, int s, int Rd, int Rm, int Rs) { - if (Rd == Rm) { int t = Rm; Rm=Rs; Rs=t; } + if (Rd == Rm) { int t = Rm; Rm=Rs; Rs=t; } LOG_FATAL_IF(Rd==Rm, "MUL(r%u,r%u,r%u)", Rd,Rm,Rs); *mPC++ = (cc<<28) | (s<<20) | (Rd<<16) | (Rs<<8) | 0x90 | Rm; } @@ -577,4 +577,3 @@ uint32_t ARMAssembler::reg_post(int Rm) } }; // namespace android - diff --git a/libpixelflinger/codeflinger/Arm64Assembler.cpp b/libpixelflinger/codeflinger/Arm64Assembler.cpp index aebc129bf..8926776d4 100644 --- a/libpixelflinger/codeflinger/Arm64Assembler.cpp +++ b/libpixelflinger/codeflinger/Arm64Assembler.cpp @@ -325,7 +325,7 @@ int ArmToArm64Assembler::generate(const char* name) printf(format, name, int(pc()-base()), base(), pc(), duration); disassemble(name); } - return NO_ERROR; + return OK; } uint32_t* ArmToArm64Assembler::pcForLabel(const char* label) @@ -1238,4 +1238,3 @@ uint32_t ArmToArm64Assembler::A64_EXTR_W(uint32_t Rd, uint32_t Rn, } }; // namespace android - diff --git a/libpixelflinger/codeflinger/MIPSAssembler.cpp b/libpixelflinger/codeflinger/MIPSAssembler.cpp index 039a72504..7de8cc11e 100644 --- a/libpixelflinger/codeflinger/MIPSAssembler.cpp +++ b/libpixelflinger/codeflinger/MIPSAssembler.cpp @@ -1421,7 +1421,7 @@ int MIPSAssembler::generate(const char* name) disassemble(name); } - return NO_ERROR; + return OK; } uint32_t* MIPSAssembler::pcForLabel(const char* label) @@ -1953,5 +1953,3 @@ void MIPSAssembler::UNIMPL(void) }; // namespace android: - - diff --git a/libsystem/include/system/camera.h b/libsystem/include/system/camera.h index 7d796737c..2ca90c395 100644 --- a/libsystem/include/system/camera.h +++ b/libsystem/include/system/camera.h @@ -158,8 +158,8 @@ enum { * * When any camera method returns error, the client can use ping command * to see if the camera has been taken away by other clients. If the result - * is NO_ERROR, it means the camera hardware is not released. If the result - * is not NO_ERROR, the camera has been released and the existing client + * is OK, it means the camera hardware is not released. If the result + * is not OK, the camera has been released and the existing client * can silently finish itself or show a dialog. */ CAMERA_CMD_PING = 9, diff --git a/libutils/PropertyMap.cpp b/libutils/PropertyMap.cpp index b8c065dc4..f00272a0f 100644 --- a/libutils/PropertyMap.cpp +++ b/libutils/PropertyMap.cpp @@ -208,7 +208,7 @@ status_t PropertyMap::Parser::parse() { mTokenizer->nextLine(); } - return NO_ERROR; + return OK; } } // namespace android diff --git a/libutils/String16.cpp b/libutils/String16.cpp index 5c0b406ca..818b17124 100644 --- a/libutils/String16.cpp +++ b/libutils/String16.cpp @@ -157,12 +157,12 @@ status_t String16::setTo(const String16& other, size_t len, size_t begin) if (begin >= N) { SharedBuffer::bufferFromData(mString)->release(); mString = getEmptyString(); - return NO_ERROR; + return OK; } if ((begin+len) > N) len = N-begin; if (begin == 0 && len == N) { setTo(other); - return NO_ERROR; + return OK; } if (&other == this) { @@ -191,7 +191,7 @@ status_t String16::setTo(const char16_t* other, size_t len) memmove(str, other, len*sizeof(char16_t)); str[len] = 0; mString = str; - return NO_ERROR; + return OK; } return NO_MEMORY; } @@ -202,9 +202,9 @@ status_t String16::append(const String16& other) const size_t otherLen = other.size(); if (myLen == 0) { setTo(other); - return NO_ERROR; + return OK; } else if (otherLen == 0) { - return NO_ERROR; + return OK; } if (myLen >= SIZE_MAX / sizeof(char16_t) - otherLen) { @@ -218,7 +218,7 @@ status_t String16::append(const String16& other) char16_t* str = (char16_t*)buf->data(); memcpy(str+myLen, other, (otherLen+1)*sizeof(char16_t)); mString = str; - return NO_ERROR; + return OK; } return NO_MEMORY; } @@ -228,9 +228,9 @@ status_t String16::append(const char16_t* chrs, size_t otherLen) const size_t myLen = size(); if (myLen == 0) { setTo(chrs, otherLen); - return NO_ERROR; + return OK; } else if (otherLen == 0) { - return NO_ERROR; + return OK; } if (myLen >= SIZE_MAX / sizeof(char16_t) - otherLen) { @@ -245,7 +245,7 @@ status_t String16::append(const char16_t* chrs, size_t otherLen) memcpy(str+myLen, chrs, otherLen*sizeof(char16_t)); str[myLen+otherLen] = 0; mString = str; - return NO_ERROR; + return OK; } return NO_MEMORY; } @@ -260,9 +260,9 @@ status_t String16::insert(size_t pos, const char16_t* chrs, size_t len) const size_t myLen = size(); if (myLen == 0) { return setTo(chrs, len); - return NO_ERROR; + return OK; } else if (len == 0) { - return NO_ERROR; + return OK; } if (pos > myLen) pos = myLen; @@ -286,7 +286,7 @@ status_t String16::insert(size_t pos, const char16_t* chrs, size_t len) #if 0 printf("Result (%d chrs): %s\n", size(), String8(*this).string()); #endif - return NO_ERROR; + return OK; } return NO_MEMORY; } @@ -357,7 +357,7 @@ status_t String16::makeLower() edit[i] = tolower((char)v); } } - return NO_ERROR; + return OK; } status_t String16::replaceAll(char16_t replaceThis, char16_t withThis) @@ -378,7 +378,7 @@ status_t String16::replaceAll(char16_t replaceThis, char16_t withThis) edit[i] = withThis; } } - return NO_ERROR; + return OK; } status_t String16::remove(size_t len, size_t begin) @@ -387,11 +387,11 @@ status_t String16::remove(size_t len, size_t begin) if (begin >= N) { SharedBuffer::bufferFromData(mString)->release(); mString = getEmptyString(); - return NO_ERROR; + return OK; } if ((begin+len) > N) len = N-begin; if (begin == 0 && len == N) { - return NO_ERROR; + return OK; } if (begin > 0) { @@ -410,7 +410,7 @@ status_t String16::remove(size_t len, size_t begin) char16_t* str = (char16_t*)buf->data(); str[len] = 0; mString = str; - return NO_ERROR; + return OK; } return NO_MEMORY; } diff --git a/libutils/String8.cpp b/libutils/String8.cpp index 8d318f77f..0025c5648 100644 --- a/libutils/String8.cpp +++ b/libutils/String8.cpp @@ -230,7 +230,7 @@ status_t String8::setTo(const char* other) const char *newString = allocFromUTF8(other, strlen(other)); SharedBuffer::bufferFromData(mString)->release(); mString = newString; - if (mString) return NO_ERROR; + if (mString) return OK; mString = getEmptyString(); return NO_MEMORY; @@ -241,7 +241,7 @@ status_t String8::setTo(const char* other, size_t len) const char *newString = allocFromUTF8(other, len); SharedBuffer::bufferFromData(mString)->release(); mString = newString; - if (mString) return NO_ERROR; + if (mString) return OK; mString = getEmptyString(); return NO_MEMORY; @@ -252,7 +252,7 @@ status_t String8::setTo(const char16_t* other, size_t len) const char *newString = allocFromUTF16(other, len); SharedBuffer::bufferFromData(mString)->release(); mString = newString; - if (mString) return NO_ERROR; + if (mString) return OK; mString = getEmptyString(); return NO_MEMORY; @@ -263,7 +263,7 @@ status_t String8::setTo(const char32_t* other, size_t len) const char *newString = allocFromUTF32(other, len); SharedBuffer::bufferFromData(mString)->release(); mString = newString; - if (mString) return NO_ERROR; + if (mString) return OK; mString = getEmptyString(); return NO_MEMORY; @@ -274,9 +274,9 @@ status_t String8::append(const String8& other) const size_t otherLen = other.bytes(); if (bytes() == 0) { setTo(other); - return NO_ERROR; + return OK; } else if (otherLen == 0) { - return NO_ERROR; + return OK; } return real_append(other.string(), otherLen); @@ -292,7 +292,7 @@ status_t String8::append(const char* other, size_t otherLen) if (bytes() == 0) { return setTo(other, otherLen); } else if (otherLen == 0) { - return NO_ERROR; + return OK; } return real_append(other, otherLen); @@ -311,7 +311,7 @@ status_t String8::appendFormat(const char* fmt, ...) status_t String8::appendFormatV(const char* fmt, va_list args) { - int n, result = NO_ERROR; + int n, result = OK; va_list tmp_args; /* args is undefined after vsnprintf. @@ -346,7 +346,7 @@ status_t String8::real_append(const char* other, size_t otherLen) str += myLen; memcpy(str, other, otherLen); str[otherLen] = '\0'; - return NO_ERROR; + return OK; } return NO_MEMORY; } @@ -382,7 +382,7 @@ status_t String8::unlockBuffer(size_t size) mString = str; } - return NO_ERROR; + return OK; } ssize_t String8::find(const char* other, size_t start) const diff --git a/libutils/Threads.cpp b/libutils/Threads.cpp index 43ec6c139..64bc4025d 100644 --- a/libutils/Threads.cpp +++ b/libutils/Threads.cpp @@ -379,7 +379,7 @@ status_t Mutex::lock() { DWORD dwWaitResult; dwWaitResult = WaitForSingleObject((HANDLE) mState, INFINITE); - return dwWaitResult != WAIT_OBJECT_0 ? -1 : NO_ERROR; + return dwWaitResult != WAIT_OBJECT_0 ? -1 : OK; } void Mutex::unlock() @@ -506,7 +506,7 @@ typedef struct WinCondition { ReleaseMutex(condState->internalMutex); WaitForSingleObject(hMutex, INFINITE); - return res == WAIT_OBJECT_0 ? NO_ERROR : -1; + return res == WAIT_OBJECT_0 ? OK : -1; } } WinCondition; @@ -639,13 +639,15 @@ void Condition::broadcast() */ Thread::Thread(bool canCallJava) - : mCanCallJava(canCallJava), - mThread(thread_id_t(-1)), - mLock("Thread::mLock"), - mStatus(NO_ERROR), - mExitPending(false), mRunning(false) + : mCanCallJava(canCallJava), + mThread(thread_id_t(-1)), + mLock("Thread::mLock"), + mStatus(OK), + mExitPending(false), + mRunning(false) #if defined(__ANDROID__) - , mTid(-1) + , + mTid(-1) #endif { } @@ -656,7 +658,7 @@ Thread::~Thread() status_t Thread::readyToRun() { - return NO_ERROR; + return OK; } status_t Thread::run(const char* name, int32_t priority, size_t stack) @@ -672,7 +674,7 @@ status_t Thread::run(const char* name, int32_t priority, size_t stack) // reset status and exitPending to their default value, so we can // try again after an error happened (either below, or in readyToRun()) - mStatus = NO_ERROR; + mStatus = OK; mExitPending = false; mThread = thread_id_t(-1); @@ -700,10 +702,10 @@ status_t Thread::run(const char* name, int32_t priority, size_t stack) } // Do not refer to mStatus here: The thread is already running (may, in fact - // already have exited with a valid mStatus result). The NO_ERROR indication + // already have exited with a valid mStatus result). The OK indication // here merely indicates successfully starting the thread and does not // imply successful termination/execution. - return NO_ERROR; + return OK; // Exiting scope of mLock is a memory barrier and allows new thread to run } @@ -728,7 +730,7 @@ int Thread::_threadLoop(void* user) if (first) { first = false; self->mStatus = self->readyToRun(); - result = (self->mStatus == NO_ERROR); + result = (self->mStatus == OK); if (result && !self->exitPending()) { // Binder threads (and maybe others) rely on threadLoop diff --git a/libutils/Tokenizer.cpp b/libutils/Tokenizer.cpp index f73d6991f..98dd2fda5 100644 --- a/libutils/Tokenizer.cpp +++ b/libutils/Tokenizer.cpp @@ -48,7 +48,7 @@ Tokenizer::~Tokenizer() { status_t Tokenizer::open(const String8& filename, Tokenizer** outTokenizer) { *outTokenizer = nullptr; - int result = NO_ERROR; + int result = OK; int fd = ::open(filename.string(), O_RDONLY); if (fd < 0) { result = -errno; diff --git a/libutils/VectorImpl.cpp b/libutils/VectorImpl.cpp index e16f88de9..c97a19bc6 100644 --- a/libutils/VectorImpl.cpp +++ b/libutils/VectorImpl.cpp @@ -61,7 +61,7 @@ VectorImpl::~VectorImpl() "[%p] subclasses of VectorImpl must call finish_vector()" " in their destructor. Leaking %d bytes.", this, (int)(mCount*mItemSize)); - // We can't call _do_destroy() here because the vtable is already gone. + // We can't call _do_destroy() here because the vtable is already gone. } VectorImpl& VectorImpl::operator = (const VectorImpl& rhs) @@ -197,7 +197,7 @@ status_t VectorImpl::sort(VectorImpl::compar_r_t cmp, void* state) _do_copy(temp, item, 1); ssize_t j = i-1; - void* next = reinterpret_cast<char*>(array) + mItemSize*(i); + void* next = reinterpret_cast<char*>(array) + mItemSize*(i); do { _do_destroy(next, 1); _do_copy(next, curr, 1); @@ -214,13 +214,13 @@ status_t VectorImpl::sort(VectorImpl::compar_r_t cmp, void* state) } i++; } - + if (temp) { _do_destroy(temp, 1); free(temp); } } - return NO_ERROR; + return OK; } void VectorImpl::pop() @@ -354,7 +354,7 @@ ssize_t VectorImpl::setCapacity(size_t new_capacity) } ssize_t VectorImpl::resize(size_t size) { - ssize_t result = NO_ERROR; + ssize_t result = OK; if (size > mCount) { result = insertAt(mCount, size - mCount); } else if (size < mCount) { @@ -370,7 +370,7 @@ void VectorImpl::release_storage() if (sb->release(SharedBuffer::eKeepStorage) == 1) { _do_destroy(mStorage, mCount); SharedBuffer::dealloc(sb); - } + } } } @@ -644,13 +644,13 @@ ssize_t SortedVectorImpl::merge(const VectorImpl& vector) } } } - return NO_ERROR; + return OK; } ssize_t SortedVectorImpl::merge(const SortedVectorImpl& vector) { // we've merging a sorted vector... nice! - ssize_t err = NO_ERROR; + ssize_t err = OK; if (!vector.isEmpty()) { // first take care of the case where the vectors are sorted together if (do_compare(vector.itemLocation(vector.size()-1), arrayImpl()) <= 0) { @@ -677,4 +677,3 @@ ssize_t SortedVectorImpl::remove(const void* item) /*****************************************************************************/ }; // namespace android - diff --git a/libutils/include/utils/Errors.h b/libutils/include/utils/Errors.h index 7093a206a..7aafe42d4 100644 --- a/libutils/include/utils/Errors.h +++ b/libutils/include/utils/Errors.h @@ -43,8 +43,8 @@ typedef int32_t status_t; #endif enum { - OK = 0, // Everything's swell. - NO_ERROR = 0, // No errors. + OK = 0, // Preferred constant for checking success. + NO_ERROR = OK, // Deprecated synonym for `OK`. Prefer `OK` because it doesn't conflict with Windows. UNKNOWN_ERROR = (-2147483647-1), // INT32_MIN value diff --git a/libutils/include/utils/Flattenable.h b/libutils/include/utils/Flattenable.h index 0a19019ac..9d006023d 100644 --- a/libutils/include/utils/Flattenable.h +++ b/libutils/include/utils/Flattenable.h @@ -190,11 +190,11 @@ public: inline status_t flatten(void* buffer, size_t size) const { if (size < sizeof(T)) return NO_MEMORY; memcpy(buffer, static_cast<T const*>(this), sizeof(T)); - return NO_ERROR; + return OK; } inline status_t unflatten(void const* buffer, size_t) { memcpy(static_cast<T*>(this), buffer, sizeof(T)); - return NO_ERROR; + return OK; } }; diff --git a/libutils/include/utils/Functor.h b/libutils/include/utils/Functor.h index c0c8d5713..c45869917 100644 --- a/libutils/include/utils/Functor.h +++ b/libutils/include/utils/Functor.h @@ -29,7 +29,7 @@ class Functor { public: Functor() {} virtual ~Functor() {} - virtual status_t operator ()(int /*what*/, void* /*data*/) { return NO_ERROR; } + virtual status_t operator()(int /*what*/, void* /*data*/) { return OK; } }; } // namespace android diff --git a/libutils/include/utils/Tokenizer.h b/libutils/include/utils/Tokenizer.h index bb25f374c..61c5ff7be 100644 --- a/libutils/include/utils/Tokenizer.h +++ b/libutils/include/utils/Tokenizer.h @@ -37,7 +37,7 @@ public: /** * Opens a file and maps it into memory. * - * Returns NO_ERROR and a tokenizer for the file, if successful. + * Returns OK and a tokenizer for the file, if successful. * Otherwise returns an error and sets outTokenizer to NULL. */ static status_t open(const String8& filename, Tokenizer** outTokenizer); @@ -45,7 +45,7 @@ public: /** * Prepares to tokenize the contents of a string. * - * Returns NO_ERROR and a tokenizer for the string, if successful. + * Returns OK and a tokenizer for the string, if successful. * Otherwise returns an error and sets outTokenizer to NULL. */ static status_t fromContents(const String8& filename, diff --git a/llkd/include/llkd.h b/llkd/include/llkd.h index c724fce10..1e2df2f2b 100644 --- a/llkd/include/llkd.h +++ b/llkd/include/llkd.h @@ -57,7 +57,7 @@ unsigned llkCheckMilliseconds(void); #define LLK_BLACKLIST_UID_PROPERTY "ro.llk.blacklist.uid" #define LLK_BLACKLIST_UID_DEFAULT "" #define LLK_BLACKLIST_STACK_PROPERTY "ro.llk.blacklist.process.stack" -#define LLK_BLACKLIST_STACK_DEFAULT "init,lmkd.llkd,llkd,keystore,/system/bin/keystore" +#define LLK_BLACKLIST_STACK_DEFAULT "init,lmkd.llkd,llkd,keystore,/system/bin/keystore,ueventd" /* clang-format on */ __END_DECLS diff --git a/storaged/storaged_service.cpp b/storaged/storaged_service.cpp index 17ea25b82..45f1d4dfe 100644 --- a/storaged/storaged_service.cpp +++ b/storaged/storaged_service.cpp @@ -161,7 +161,7 @@ status_t StoragedService::dump(int fd, const Vector<String16>& args) { storaged_sp->update_uid_io_interval(time_window); } - return NO_ERROR; + return OK; } binder::Status StoragedService::onUserStarted(int32_t userId) { diff --git a/storaged/uid_info.cpp b/storaged/uid_info.cpp index 58e3fd282..0f718de84 100644 --- a/storaged/uid_info.cpp +++ b/storaged/uid_info.cpp @@ -32,7 +32,7 @@ status_t UidInfo::writeToParcel(Parcel* parcel) const { parcel->writeCString(task_it.second.comm.c_str()); parcel->write(&task_it.second.io, sizeof(task_it.second.io)); } - return NO_ERROR; + return OK; } status_t UidInfo::readFromParcel(const Parcel* parcel) { @@ -48,5 +48,5 @@ status_t UidInfo::readFromParcel(const Parcel* parcel) { parcel->read(&task.io, sizeof(task.io)); tasks[task.pid] = task; } - return NO_ERROR; + return OK; } |