diff --git a/base/properties.cpp b/base/properties.cpp index 816bca0eb54032bb786f9b398493569b8ae70c90..cde4d69e30ab9f9ee9691ac4a55305307e2fb171 100644 --- a/base/properties.cpp +++ b/base/properties.cpp @@ -36,13 +36,18 @@ std::string GetProperty(const std::string& key, const std::string& default_value const prop_info* pi = __system_property_find(key.c_str()); if (pi == nullptr) return default_value; - char buf[PROP_VALUE_MAX]; - if (__system_property_read(pi, nullptr, buf) > 0) return buf; + std::string property_value; + __system_property_read_callback(pi, + [](void* cookie, const char*, const char* value, unsigned) { + auto property_value = reinterpret_cast(cookie); + *property_value = value; + }, + &property_value); // If the property exists but is empty, also return the default value. // Since we can't remove system properties, "empty" is traditionally // the same as "missing" (this was true for cutils' property_get). - return default_value; + return property_value.empty() ? default_value : property_value; } bool GetBoolProperty(const std::string& key, bool default_value) { diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp index d134cf22f94323c0fdb89264617c2baba8e9e767..6fb29a9385feeb6fe8bfa3f6b65e64c09be104bc 100644 --- a/debuggerd/libdebuggerd/tombstone.cpp +++ b/debuggerd/libdebuggerd/tombstone.cpp @@ -35,12 +35,12 @@ #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -53,6 +53,8 @@ #include "libdebuggerd/machine.h" #include "libdebuggerd/open_files_list.h" +using android::base::GetBoolProperty; +using android::base::GetProperty; using android::base::StringPrintf; #define STACK_WORDS 16 @@ -206,14 +208,11 @@ static const char* get_sigcode(int signo, int code) { } static void dump_header_info(log_t* log) { - char fingerprint[PROPERTY_VALUE_MAX]; - char revision[PROPERTY_VALUE_MAX]; + auto fingerprint = GetProperty("ro.build.fingerprint", "unknown"); + auto revision = GetProperty("ro.revision", "unknown"); - property_get("ro.build.fingerprint", fingerprint, "unknown"); - property_get("ro.revision", revision, "unknown"); - - _LOG(log, logtype::HEADER, "Build fingerprint: '%s'\n", fingerprint); - _LOG(log, logtype::HEADER, "Revision: '%s'\n", revision); + _LOG(log, logtype::HEADER, "Build fingerprint: '%s'\n", fingerprint.c_str()); + _LOG(log, logtype::HEADER, "Revision: '%s'\n", revision.c_str()); _LOG(log, logtype::HEADER, "ABI: '%s'\n", ABI_STRING); } @@ -724,9 +723,7 @@ static void dump_crash(log_t* log, BacktraceMap* map, BacktraceMap* map_new, const std::string& process_name, const std::map& threads, uintptr_t abort_msg_address) { // don't copy log messages to tombstone unless this is a dev device - char value[PROPERTY_VALUE_MAX]; - property_get("ro.debuggable", value, "0"); - bool want_logs = (value[0] == '1'); + bool want_logs = GetBoolProperty("ro.debuggable", false); _LOG(log, logtype::HEADER, "*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n"); diff --git a/fs_mgr/Android.bp b/fs_mgr/Android.bp index 7fd67c293c3ec0e1a16d5edb90d6ca1803044976..2f530efb465894afd2147c4eeaeff72ea7c9a4b1 100644 --- a/fs_mgr/Android.bp +++ b/fs_mgr/Android.bp @@ -55,12 +55,22 @@ cc_library_static { "liblogwrap", "libfstab", ], + cppflags: [ + "-DALLOW_SKIP_SECURE_CHECK=0", + "-DALLOW_ADBD_DISABLE_VERITY=0", + ], product_variables: { debuggable: { - cppflags: ["-DALLOW_ADBD_DISABLE_VERITY=1"], + cppflags: [ + "-UALLOW_ADBD_DISABLE_VERITY", + "-DALLOW_ADBD_DISABLE_VERITY=1", + ], }, eng: { - cppflags: ["-DALLOW_SKIP_SECURE_CHECK=1"], + cppflags: [ + "-UALLOW_SKIP_SECURE_CHECK", + "-DALLOW_SKIP_SECURE_CHECK=1", + ], }, }, } diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp index c9af42164da346587308149d7fa4e3ad58055164..25b671b1402a3e52427f369def48f9ac657ec0f3 100644 --- a/fs_mgr/fs_mgr.cpp +++ b/fs_mgr/fs_mgr.cpp @@ -543,15 +543,6 @@ static int fs_match(const char *in1, const char *in2) return ret; } -static int device_is_force_encrypted() { - int ret = -1; - char value[PROP_VALUE_MAX]; - ret = __system_property_get("ro.vold.forceencryption", value); - if (ret < 0) - return 0; - return strcmp(value, "1") ? 0 : 1; -} - /* * Tries to mount any of the consecutive fstab entries that match * the mountpoint of the one given by fstab->recs[start_idx]. @@ -726,7 +717,9 @@ out: static bool needs_block_encryption(const struct fstab_rec* rec) { - if (device_is_force_encrypted() && fs_mgr_is_encryptable(rec)) return true; + if (android::base::GetBoolProperty("ro.vold.forceencryption", false) && + fs_mgr_is_encryptable(rec)) + return true; if (rec->fs_mgr_flags & MF_FORCECRYPT) return true; if (rec->fs_mgr_flags & MF_CRYPT) { /* Check for existence of convert_fde breadcrumb file */ @@ -781,20 +774,7 @@ static int handle_encryptable(const struct fstab_rec* rec) } bool is_device_secure() { - int ret = -1; - char value[PROP_VALUE_MAX]; - ret = __system_property_get("ro.secure", value); - if (ret == 0) { -#ifdef ALLOW_SKIP_SECURE_CHECK - // Allow eng builds to skip this check if the property - // is not readable (happens during early mount) - return false; -#else - // If error and not an 'eng' build, we want to fail secure. - return true; -#endif - } - return strcmp(value, "0") ? true : false; + return android::base::GetBoolProperty("ro.secure", ALLOW_SKIP_SECURE_CHECK ? false : true); } /* When multiple fstab records share the same mount_point, it will