Merge "[MTE] warn about async crashes being imprecise"
diff --git a/bootstat/bootstat.rc b/bootstat/bootstat.rc
index 23f01d1..22bd0e7 100644
--- a/bootstat/bootstat.rc
+++ b/bootstat/bootstat.rc
@@ -40,15 +40,6 @@
chown system log /data/misc/bootstat/time_since_last_boot
# end ota transitional support
-# Record the time at which the user has successfully entered the pin to decrypt
-# the device, /data is decrypted, and the system is entering the main boot phase.
-#
-# post-fs-data: /data is writable
-# property:init.svc.bootanim=running: The boot animation is running
-# property:ro.crypto.type=block: FDE device
-on post-fs-data && property:init.svc.bootanim=running && property:ro.crypto.type=block
- exec_background - system log -- /system/bin/bootstat -r post_decrypt_time_elapsed
-
# Initialize bootstat state machine.
#
# sys.bootstat.first_boot_completed: responsible for making sure that record_boot_complete happens
diff --git a/debuggerd/libdebuggerd/gwp_asan.cpp b/debuggerd/libdebuggerd/gwp_asan.cpp
index d8f74e0..26084dc 100644
--- a/debuggerd/libdebuggerd/gwp_asan.cpp
+++ b/debuggerd/libdebuggerd/gwp_asan.cpp
@@ -88,7 +88,7 @@
thread_id_ = thread_info.tid;
// Grab the internal error address, if it exists.
- uintptr_t internal_crash_address = __gwp_asan_get_internal_crash_address(&state_);
+ uintptr_t internal_crash_address = __gwp_asan_get_internal_crash_address(&state_, crash_address_);
if (internal_crash_address) {
crash_address_ = internal_crash_address;
}
diff --git a/debuggerd/libdebuggerd/scudo.cpp b/debuggerd/libdebuggerd/scudo.cpp
index 37e390b..5a62fe1 100644
--- a/debuggerd/libdebuggerd/scudo.cpp
+++ b/debuggerd/libdebuggerd/scudo.cpp
@@ -44,9 +44,12 @@
__scudo_get_stack_depot_size());
auto region_info = AllocAndReadFully(process_memory, process_info.scudo_region_info,
__scudo_get_region_info_size());
- auto ring_buffer = AllocAndReadFully(process_memory, process_info.scudo_ring_buffer,
- process_info.scudo_ring_buffer_size);
- if (!stack_depot || !region_info || !ring_buffer) {
+ std::unique_ptr<char[]> ring_buffer;
+ if (process_info.scudo_ring_buffer_size != 0) {
+ ring_buffer = AllocAndReadFully(process_memory, process_info.scudo_ring_buffer,
+ process_info.scudo_ring_buffer_size);
+ }
+ if (!stack_depot || !region_info) {
return;
}
diff --git a/fs_mgr/TEST_MAPPING b/fs_mgr/TEST_MAPPING
index 432aa4f..2b5e337 100644
--- a/fs_mgr/TEST_MAPPING
+++ b/fs_mgr/TEST_MAPPING
@@ -27,5 +27,16 @@
{
"name": "cow_api_test"
}
+ ],
+ "kernel-presubmit": [
+ {
+ "name": "vts_libdm_test"
+ },
+ {
+ "name": "vts_core_liblp_test"
+ },
+ {
+ "name": "vts_libsnapshot_test"
+ }
]
}
diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp
index 36bd75d..598a3d2 100644
--- a/fs_mgr/fs_mgr_fstab.cpp
+++ b/fs_mgr/fs_mgr_fstab.cpp
@@ -304,19 +304,16 @@
if (!ParseByteCount(arg, &entry->zram_backingdev_size)) {
LWARNING << "Warning: zram_backingdev_size= flag malformed: " << arg;
}
- } else if (StartsWith(flag, "zoned_device=")) {
- std::string zoned;
- if (ReadFileToString("/sys/class/block/" + arg + "/queue/zoned", &zoned) &&
- android::base::StartsWith(zoned, "host-managed")) {
- entry->zoned_device = "/dev/block/" + arg;
+ } else if (flag == "zoned_device") {
+ if (access("/dev/block/by-name/zoned_device", F_OK) == 0) {
+ entry->zoned_device = "/dev/block/by-name/zoned_device";
// atgc in f2fs does not support a zoned device
auto options = Split(entry->fs_options, ",");
options.erase(std::remove(options.begin(), options.end(), "atgc"), options.end());
entry->fs_options = android::base::Join(options, ",");
- LINFO << "Removed ATGC in fs_options as " << entry->fs_options;
- } else {
- LWARNING << "Warning: cannot find the zoned device: " << arg;
+ LINFO << "Removed ATGC in fs_options as " << entry->fs_options
+ << " for zoned device=" << entry->zoned_device;
}
} else {
LWARNING << "Warning: unknown flag: " << flag;
diff --git a/fs_mgr/libfiemap/README.md b/fs_mgr/libfiemap/README.md
index 62d610a..cdc80b2 100644
--- a/fs_mgr/libfiemap/README.md
+++ b/fs_mgr/libfiemap/README.md
@@ -35,18 +35,18 @@
We break the problem down into three scenarios.
-### FDE and Metadata Encrypted Devices
+### Metadata Encrypted Devices
-When FDE or metadata encryption is used, `/data` is not mounted from
+When metadata encryption is used, `/data` is not mounted from
`/dev/block/by-name/data`. Instead, it is mounted from an intermediate
-`dm-crypt` or `dm-default-key` device. This means the underlying device is
-not marked in use, and we can create new dm-linear devices on top of it.
+`dm-default-key` device. This means the underlying device is not marked in use,
+and we can create new dm-linear devices on top of it.
On these devices, a block device for an image will consist of a single
device-mapper device with a `dm-linear` table entry for each extent in the
backing file.
-### Unencrypted and FBE-encrypted Devices
+### Unencrypted and FBE-only Devices
When a device is unencrypted, or is encrypted with FBE but not metadata
encryption, we instead use a loop device with `LOOP_SET_DIRECT_IO` enabled.
diff --git a/init/Android.bp b/init/Android.bp
index c7e7de8..1aba4b3 100644
--- a/init/Android.bp
+++ b/init/Android.bp
@@ -454,15 +454,7 @@
defaults: ["init_defaults"],
require_root: true,
- compile_multilib: "both",
- multilib: {
- lib32: {
- suffix: "32",
- },
- lib64: {
- suffix: "64",
- },
- },
+ compile_multilib: "first",
srcs: [
"devices_test.cpp",
diff --git a/init/AndroidTest.xml b/init/AndroidTest.xml
index 6f22ab7..8b05484 100644
--- a/init/AndroidTest.xml
+++ b/init/AndroidTest.xml
@@ -22,7 +22,6 @@
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
<option name="cleanup" value="true" />
<option name="push" value="CtsInitTestCases->/data/local/tmp/CtsInitTestCases" />
- <option name="append-bitness" value="true" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
<option name="throw-on-error" value="false" />
diff --git a/init/devices.cpp b/init/devices.cpp
index 8bc6e52..39442a0 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -431,6 +431,12 @@
}
}
+ std::string model;
+ if (ReadFileToString("/sys/class/block/" + uevent.device_name + "/queue/zoned", &model) &&
+ !StartsWith(model, "none")) {
+ links.emplace_back("/dev/block/by-name/zoned_device");
+ }
+
auto last_slash = uevent.path.rfind('/');
links.emplace_back(link_path + "/" + uevent.path.substr(last_slash + 1));
diff --git a/libcutils/TEST_MAPPING b/libcutils/TEST_MAPPING
index 6477502..eb63aa5 100644
--- a/libcutils/TEST_MAPPING
+++ b/libcutils/TEST_MAPPING
@@ -8,5 +8,10 @@
{
"name": "libcutils_test"
}
+ ],
+ "kernel-presubmit": [
+ {
+ "name": "libcutils_test"
+ }
]
}
diff --git a/libstats/expresslog/.clang-format b/libstats/expresslog/.clang-format
new file mode 100644
index 0000000..cead3a0
--- /dev/null
+++ b/libstats/expresslog/.clang-format
@@ -0,0 +1,17 @@
+BasedOnStyle: Google
+AllowShortIfStatementsOnASingleLine: true
+AllowShortFunctionsOnASingleLine: false
+AllowShortLoopsOnASingleLine: true
+BinPackArguments: true
+BinPackParameters: true
+ColumnLimit: 100
+CommentPragmas: NOLINT:.*
+ContinuationIndentWidth: 8
+DerivePointerAlignment: false
+IndentWidth: 4
+PointerAlignment: Left
+TabWidth: 4
+AccessModifierOffset: -4
+IncludeCategories:
+ - Regex: '^"Log\.h"'
+ Priority: -1
diff --git a/libstats/expresslog/Android.bp b/libstats/expresslog/Android.bp
new file mode 100644
index 0000000..9cdc2c3
--- /dev/null
+++ b/libstats/expresslog/Android.bp
@@ -0,0 +1,71 @@
+
+//
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+cc_library {
+ name: "libexpresslog",
+ srcs: [
+ "Counter.cpp",
+ ],
+ cflags: [
+ "-DNAMESPACE_FOR_HASH_FUNCTIONS=farmhash",
+ "-Wall",
+ "-Werror",
+ ],
+ header_libs: [
+ "libtextclassifier_hash_headers",
+ ],
+ static_libs: [
+ "libstatslog_express",
+ "libtextclassifier_hash_static",
+ ],
+ shared_libs: [
+ "libbase",
+ "libstatssocket",
+ ],
+ export_include_dirs: ["include"],
+}
+
+genrule {
+ name: "statslog_express.h",
+ tools: ["stats-log-api-gen"],
+ cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_express.h --module expresslog --namespace android,expresslog",
+ out: [
+ "statslog_express.h",
+ ],
+}
+
+genrule {
+ name: "statslog_express.cpp",
+ tools: ["stats-log-api-gen"],
+ cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_express.cpp --module expresslog --namespace android,expresslog --importHeader statslog_express.h",
+ out: [
+ "statslog_express.cpp",
+ ],
+}
+
+cc_library_static {
+ name: "libstatslog_express",
+ generated_sources: ["statslog_express.cpp"],
+ generated_headers: ["statslog_express.h"],
+ export_generated_headers: ["statslog_express.h"],
+ shared_libs: [
+ "libstatssocket",
+ ],
+}
diff --git a/libstats/expresslog/Counter.cpp b/libstats/expresslog/Counter.cpp
new file mode 100644
index 0000000..bee1303
--- /dev/null
+++ b/libstats/expresslog/Counter.cpp
@@ -0,0 +1,32 @@
+//
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "include/Counter.h"
+
+#include <statslog_express.h>
+#include <string.h>
+#include <utils/hash/farmhash.h>
+
+namespace android {
+namespace expresslog {
+
+void Counter::logIncrement(const char* metricName, int64_t amount) {
+ const int64_t metricIdHash = farmhash::Fingerprint64(metricName, strlen(metricName));
+ stats_write(EXPRESS_EVENT_REPORTED, metricIdHash, amount);
+}
+
+} // namespace expresslog
+} // namespace android
diff --git a/libstats/expresslog/include/Counter.h b/libstats/expresslog/include/Counter.h
new file mode 100644
index 0000000..57328f5
--- /dev/null
+++ b/libstats/expresslog/include/Counter.h
@@ -0,0 +1,30 @@
+//
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#pragma once
+#include <stdint.h>
+
+namespace android {
+namespace expresslog {
+
+/** Counter encapsulates StatsD write API calls */
+class Counter final {
+public:
+ static void logIncrement(const char* metricId, int64_t amount = 1);
+};
+
+} // namespace expresslog
+} // namespace android
diff --git a/rootdir/init.rc b/rootdir/init.rc
index efad37c..db5113f 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -643,7 +643,7 @@
chmod 0755 /sys/kernel/tracing
chmod 0755 /sys/kernel/debug/tracing
- # HALs required before storage encryption can get unlocked (FBE/FDE)
+ # HALs required before storage encryption can get unlocked (FBE)
class_start early_hal
# Load trusted keys from dm-verity protected partitions
@@ -746,9 +746,8 @@
# /data/apex is now available. Start apexd to scan and activate APEXes.
#
- # To handle userspace reboots as well as devices that use FDE, make sure
- # that apexd is started cleanly here (set apexd.status="") and that it is
- # restarted if it's already running.
+ # To handle userspace reboots, make sure that apexd is started cleanly here
+ # (set apexd.status="") and that it is restarted if it's already running.
#
# /data/apex uses encryption=None because direct I/O support is needed on
# APEX files, but some devices don't support direct I/O on encrypted files.
@@ -1286,6 +1285,7 @@
group shell log readproc
seclabel u:r:shell:s0
setenv HOSTNAME console
+ shutdown critical
on property:ro.debuggable=1
# Give writes to anyone for the trace folder on debug builds.