blob: 3f658a0ed1f7e44650fdae1c58c74ed2eee90a63 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "crash-reporter/anomaly_detector.h"
#include <base/files/file_path.h>
#include <base/optional.h>
#include <chromeos/dbus/service_constants.h>
#include <dbus/message.h>
#include <dbus/mock_bus.h>
#include <dbus/mock_exported_object.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "crash-reporter/anomaly_detector_test_utils.h"
namespace {
using ::testing::_;
using ::testing::Eq;
using ::testing::IsEmpty;
using ::testing::Return;
using ::anomaly::CryptohomeParser;
using ::anomaly::KernelParser;
using ::anomaly::ParserRun;
using ::anomaly::ParserTest;
using ::anomaly::SELinuxParser;
using ::anomaly::ServiceParser;
using ::anomaly::SuspendParser;
using ::anomaly::TcsdParser;
using ::anomaly::TerminaParser;
const ParserRun simple_run;
const ParserRun empty{.expected_size = 0};
} // namespace
TEST(AnomalyDetectorTest, KernelAth10kSNOCError) {
ParserRun wifi_error = {
.expected_text =
"[393652.069986] ath10k_snoc 18800000.wifi: "
"firmware crashed! (guid 7c8da1e6-f8fe-4665-8257-5a476a7bc786)\n"
"[393652.070050] ath10k_snoc 18800000.wifi: "
"wcn3990 hw1.0 target 0x00000008 chip_id 0x00000000 sub 0000:0000\n"
"[393652.070086] ath10k_snoc 18800000.wifi: "
"kconfig debug 1 debugfs 1 tracing 0 dfs 0 testmode 1\n"
"[393652.070124] ath10k_snoc 18800000.wifi: "
"firmware ver 1.0.0.922 api 5 features "
"wowlan,mfp,mgmt-tx-by-reference"
",non-bmi,single-chan-info-per-channel crc32 3f19f7c1\n"
"[393652.070158] ath10k_snoc 18800000.wifi: "
"board_file api 2 bmi_id N/A crc32 00000000\n"
"[393652.070195] ath10k_snoc 18800000.wifi: "
"htt-ver 3.86 wmi-op 4 htt-op 3 cal file max-sta 32 raw 0 hwcrypto "
"1\n",
.expected_flags = {{"--kernel_ath10k_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_ATH10K_SNOC", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelAth10kSDIOError) {
ParserRun wifi_error = {
.expected_text =
"[10108611.994407] ath10k_sdio mmc1:0001:1: "
"firmware crashed! (guid bfc44e6c-4cef-425b-b9ca-5530c650d0a3)\n"
"[10108611.994442] ath10k_sdio mmc1:0001:1: "
"qca6174 hw3.2 sdio target 0x05030000 chip_id 0x00000000 sub "
"0000:0000\n"
"[10108611.994457] ath10k_sdio mmc1:0001:1: "
"kconfig debug 1 debugfs 1 tracing 1 dfs 0 testmode 1\n"
"[10108611.996680] ath10k_sdio mmc1:0001:1: "
"firmware ver WLAN.RMH.4.4.1-00077 api 6 features wowlan,ignore-otp "
"crc32 a48b7c2f\n"
"[10108611.999858] ath10k_sdio mmc1:0001:1: "
"board_file api 2 bmi_id 0:4 crc32 fe1026b8\n"
"[10108611.999887] ath10k_sdio mmc1:0001:1: "
"htt-ver 3.86 wmi-op 4 htt-op 3 cal otp max-sta 32 raw 0 hwcrypto "
"1\n",
.expected_flags = {{"--kernel_ath10k_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_ATH10K_SDIO", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelAth10kPCIError) {
ParserRun wifi_error = {
.expected_text =
"[ 1582.994118] ath10k_pci 0000:01:00.0: "
"firmware crashed! (guid cad1f078-23d2-4cfe-a58a-1e9d353acb7e)\n"
"[ 1582.994133] ath10k_pci 0000:01:00.0: "
"qca6174 hw3.2 target 0x05030000 chip_id 0x00340aff sub 17aa:0827\n"
"[ 1582.994141] ath10k_pci 0000:01:00.0: "
"kconfig debug 1 debugfs 1 tracing 1 dfs 0 testmode 1\n"
"[ 1582.995552] ath10k_pci 0000:01:00.0: "
"firmware ver WLAN.RM.4.4.1-00157-QCARMSWPZ-1 api 6 features "
"wowlan,ignore-otp,mfp crc32 90eebefb\n"
"[ 1582.996924] ath10k_pci 0000:01:00.0: "
"board_file api 2 bmi_id N/A crc32 bebf3597\n"
"[ 1582.996936] ath10k_pci 0000:01:00.0: "
"htt-ver 3.60 wmi-op 4 htt-op 3 cal otp max-sta 32 raw 0 hwcrypto "
"1\n",
.expected_flags = {{"--kernel_ath10k_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_ATH10K_PCI", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelAth10kErrorNoEnd) {
ParserRun wifi_error = {
.expected_text =
"[393652.069986] ath10k_snoc 18800000.wifi: firmware crashed! "
"(guid 7c8da1e6-f8fe-4665-8257-5a476a7bc786)\n"
"[393652.070050] ath10k_snoc 18800000.wifi: wcn3990 hw1.0 target "
"0x00000008 chip_id 0x00000000 sub 0000:0000\n"
"[393652.070086] ath10k_snoc 18800000.wifi: kconfig debug 1 debugfs "
"1 tracing 0 dfs 0 testmode 1\n"
"[393652.070124] ath10k_snoc 18800000.wifi: firmware ver 1.0.0.922 "
"api 5 features wowlan,mfp,mgmt-tx-by-reference,non-bmi,single-chan"
"-info-per-channel crc32 3f19f7c1\n"
"[393652.070158] ath10k_snoc 18800000.wifi: board_file api 2 bmi_id"
" N/A crc32 00000000\n",
.expected_flags = {{"--kernel_ath10k_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_ATH10K_NO_END", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelIwlwifiErrorLmacUmac) {
ParserRun wifi_error = {
.expected_text =
"[15883.337352] iwlwifi 0000:00:0c.0: Loaded firmware version: "
"46.b20aefee.0\n"
"[15883.337355] iwlwifi 0000:00:0c.0: 0x00000084 | "
"NMI_INTERRUPT_UNKNOWN\n"
"[15883.337357] iwlwifi 0000:00:0c.0: 0x000022F0 | trm_hw_status0\n"
"[15883.337359] iwlwifi 0000:00:0c.0: 0x00000000 | trm_hw_status1\n"
"[15883.337362] iwlwifi 0000:00:0c.0: 0x0048751E | branchlink2\n"
"[15883.337364] iwlwifi 0000:00:0c.0: 0x00479236 | interruptlink1\n"
"[15883.337366] iwlwifi 0000:00:0c.0: 0x0000AE00 | interruptlink2\n"
"[15883.337369] iwlwifi 0000:00:0c.0: 0x0001A2D6 | data1\n"
"[15883.337371] iwlwifi 0000:00:0c.0: 0xFF000000 | data2\n"
"[15883.337373] iwlwifi 0000:00:0c.0: 0xF0000000 | data3\n"
"[15883.337376] iwlwifi 0000:00:0c.0: 0x00000000 | beacon time\n"
"[15883.337378] iwlwifi 0000:00:0c.0: 0x158DE6F7 | tsf low\n"
"[15883.337380] iwlwifi 0000:00:0c.0: 0x00000000 | tsf hi\n"
"[15883.337383] iwlwifi 0000:00:0c.0: 0x00000000 | time gp1\n"
"[15883.337385] iwlwifi 0000:00:0c.0: 0x158DE6F9 | time gp2\n"
"[15883.337388] iwlwifi 0000:00:0c.0: 0x00000001 | uCode revision "
"type\n"
"[15883.337390] iwlwifi 0000:00:0c.0: 0x0000002E | uCode version "
"major\n"
"[15883.337392] iwlwifi 0000:00:0c.0: 0xB20AEFEE | uCode version "
"minor\n"
"[15883.337394] iwlwifi 0000:00:0c.0: 0x00000312 | hw version\n"
"[15883.337397] iwlwifi 0000:00:0c.0: 0x00C89008 | board version\n"
"[15883.337399] iwlwifi 0000:00:0c.0: 0x007B019C | hcmd\n"
"[15883.337401] iwlwifi 0000:00:0c.0: 0x00022000 | isr0\n"
"[15883.337404] iwlwifi 0000:00:0c.0: 0x00000000 | isr1\n"
"[15883.337406] iwlwifi 0000:00:0c.0: 0x08001802 | isr2\n"
"[15883.337408] iwlwifi 0000:00:0c.0: 0x40400180 | isr3\n"
"[15883.337411] iwlwifi 0000:00:0c.0: 0x00000000 | isr4\n"
"[15883.337413] iwlwifi 0000:00:0c.0: 0x007B019C | last cmd Id\n"
"[15883.337415] iwlwifi 0000:00:0c.0: 0x0001A2D6 | wait_event\n"
"[15883.337417] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_control\n"
"[15883.337420] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_duration\n"
"[15883.337422] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_mhvalid\n"
"[15883.337424] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_addr_match\n"
"[15883.337427] iwlwifi 0000:00:0c.0: 0x0000008F | lmpm_pmg_sel\n"
"[15883.337429] iwlwifi 0000:00:0c.0: 0x24021230 | timestamp\n"
"[15883.337432] iwlwifi 0000:00:0c.0: 0x0000B0D8 | flow_handler\n"
"[15883.337464] iwlwifi 0000:00:0c.0: Start IWL Error Log Dump:\n"
"[15883.337467] iwlwifi 0000:00:0c.0: Status: 0x00000100, count: 7\n"
"[15883.337470] iwlwifi 0000:00:0c.0: 0x20000066 | "
"NMI_INTERRUPT_HOST\n"
"[15883.337472] iwlwifi 0000:00:0c.0: 0x00000000 | umac branchlink1\n"
"[15883.337475] iwlwifi 0000:00:0c.0: 0xC008821A | umac branchlink2\n"
"[15883.337477] iwlwifi 0000:00:0c.0: 0x00000000 | umac "
"interruptlink1\n"
"[15883.337479] iwlwifi 0000:00:0c.0: 0x8044FBD2 | umac "
"interruptlink2\n"
"[15883.337481] iwlwifi 0000:00:0c.0: 0x01000000 | umac data1\n"
"[15883.337484] iwlwifi 0000:00:0c.0: 0x8044FBD2 | umac data2\n"
"[15883.337486] iwlwifi 0000:00:0c.0: 0xDEADBEEF | umac data3\n"
"[15883.337488] iwlwifi 0000:00:0c.0: 0x0000002E | umac major\n"
"[15883.337490] iwlwifi 0000:00:0c.0: 0xB20AEFEE | umac minor\n"
"[15883.337493] iwlwifi 0000:00:0c.0: 0x158DE6F4 | frame pointer\n"
"[15883.337511] iwlwifi 0000:00:0c.0: 0xC088627C | stack pointer\n"
"[15883.337514] iwlwifi 0000:00:0c.0: 0x007B019C | last host cmd\n"
"[15883.337516] iwlwifi 0000:00:0c.0: 0x00000000 | isr status reg\n",
.expected_flags = {{"--kernel_iwlwifi_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_IWLWIFI_LMAC_UMAC", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelIwlwifiErrorLmacTwoSpace) {
ParserRun wifi_error = {
.expected_text =
"[79553.430924] iwlwifi 0000:02:00.0: Loaded firmware version: "
"29.116a852a.0 7265D-29.ucode\n"
"[79553.430930] iwlwifi 0000:02:00.0: 0x00000084 | "
"NMI_INTERRUPT_UNKNOWN \n"
"[79553.430935] iwlwifi 0000:02:00.0: 0x00A002F0 | trm_hw_status0\n"
"[79553.430939] iwlwifi 0000:02:00.0: 0x00000000 | trm_hw_status1\n"
"[79553.430944] iwlwifi 0000:02:00.0: 0x00043D6C | branchlink2\n"
"[79553.430948] iwlwifi 0000:02:00.0: 0x0004AFD6 | interruptlink1\n"
"[79553.430953] iwlwifi 0000:02:00.0: 0x0004AFD6 | interruptlink2\n"
"[79553.430957] iwlwifi 0000:02:00.0: 0x00000000 | data1\n"
"[79553.430961] iwlwifi 0000:02:00.0: 0x00000080 | data2\n"
"[79553.430966] iwlwifi 0000:02:00.0: 0x07230000 | data3\n"
"[79553.430970] iwlwifi 0000:02:00.0: 0x1E00B95C | beacon time\n"
"[79553.430975] iwlwifi 0000:02:00.0: 0xE6A38917 | tsf low\n"
"[79553.430979] iwlwifi 0000:02:00.0: 0x00000011 | tsf hi\n"
"[79553.430983] iwlwifi 0000:02:00.0: 0x00000000 | time gp1\n"
"[79553.430988] iwlwifi 0000:02:00.0: 0x8540E3A4 | time gp2\n"
"[79553.430992] iwlwifi 0000:02:00.0: 0x00000001 | uCode revision "
"type\n"
"[79553.430996] iwlwifi 0000:02:00.0: 0x0000001D | uCode version "
"major\n"
"[79553.431013] iwlwifi 0000:02:00.0: 0x116A852A | uCode version "
"minor\n"
"[79553.431017] iwlwifi 0000:02:00.0: 0x00000210 | hw version\n"
"[79553.431021] iwlwifi 0000:02:00.0: 0x00489200 | board version\n"
"[79553.431025] iwlwifi 0000:02:00.0: 0x0000001C | hcmd\n"
"[79553.431030] iwlwifi 0000:02:00.0: 0x00022000 | isr0\n"
"[79553.431034] iwlwifi 0000:02:00.0: 0x00000000 | isr1\n"
"[79553.431039] iwlwifi 0000:02:00.0: 0x0000000A | isr2\n"
"[79553.431043] iwlwifi 0000:02:00.0: 0x0041D4C0 | isr3\n"
"[79553.431047] iwlwifi 0000:02:00.0: 0x00000000 | isr4\n"
"[79553.431052] iwlwifi 0000:02:00.0: 0x00230151 | last cmd Id\n"
"[79553.431056] iwlwifi 0000:02:00.0: 0x00000000 | wait_event\n"
"[79553.431060] iwlwifi 0000:02:00.0: 0x0000A8CB | l2p_control\n"
"[79553.431082] iwlwifi 0000:02:00.0: 0x00000020 | l2p_duration\n"
"[79553.431086] iwlwifi 0000:02:00.0: 0x00000003 | l2p_mhvalid\n"
"[79553.431091] iwlwifi 0000:02:00.0: 0x000000CE | l2p_addr_match\n"
"[79553.431095] iwlwifi 0000:02:00.0: 0x00000005 | lmpm_pmg_sel\n"
"[79553.431100] iwlwifi 0000:02:00.0: 0x07071159 | timestamp\n"
"[79553.431104] iwlwifi 0000:02:00.0: 0x00340010 | flow_handler\n",
.expected_flags = {{"--kernel_iwlwifi_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_IWLWIFI_LMAC_TWO_SPACE", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelIwlwifiDriverError) {
ParserRun wifi_error = {
.expected_text =
"0000:01:00.0: Loaded firmware version: 17.bfb58538.0 7260-17.ucode\n"
"2020-09-01T11:03:11.221401-07:00 ERR kernel: [ 2448.183344] iwlwifi "
"0000:01:00.0: 0x00000000 | ADVANCED_SYSASSERT\n"
"2020-09-01T11:03:11.221407-07:00 ERR kernel: [ 2448.183349] iwlwifi "
"0000:01:00.0: 0x00000000 | trm_hw_status0\n"
"2020-09-01T11:03:11.221409-07:00 ERR kernel: [ 2448.183353] iwlwifi "
"0000:01:00.0: 0x00000000 | trm_hw_status1\n"
"2020-09-01T11:03:11.221412-07:00 ERR kernel: [ 2448.183357] iwlwifi "
"0000:01:00.0: 0x00000000 | branchlink2\n"
"2020-09-01T11:03:11.221415-07:00 ERR kernel: [ 2448.183361] iwlwifi "
"0000:01:00.0: 0x00000000 | interruptlink1\n"
"2020-09-01T11:03:11.221417-07:00 ERR kernel: [ 2448.183365] iwlwifi "
"0000:01:00.0: 0x00000000 | interruptlink2\n"
"2020-09-01T11:03:11.221420-07:00 ERR kernel: [ 2448.183368] iwlwifi "
"0000:01:00.0: 0x00000000 | data1\n"
"2020-09-01T11:03:11.221422-07:00 ERR kernel: [ 2448.183372] iwlwifi "
"0000:01:00.0: 0x00000000 | data2\n"
"2020-09-01T11:03:11.221425-07:00 ERR kernel: [ 2448.183376] iwlwifi "
"0000:01:00.0: 0x00000000 | data3\n"
"2020-09-01T11:03:11.221427-07:00 ERR kernel: [ 2448.183380] iwlwifi "
"0000:01:00.0: 0x00000000 | beacon time\n"
"2020-09-01T11:03:11.221429-07:00 ERR kernel: [ 2448.183384] iwlwifi "
"0000:01:00.0: 0x00000000 | tsf low\n"
"2020-09-01T11:03:11.221432-07:00 ERR kernel: [ 2448.183388] iwlwifi "
"0000:01:00.0: 0x00000000 | tsf hi\n"
"2020-09-01T11:03:11.221434-07:00 ERR kernel: [ 2448.183392] iwlwifi "
"0000:01:00.0: 0x00000000 | time gp1\n"
"2020-09-01T11:03:11.221436-07:00 ERR kernel: [ 2448.183396] iwlwifi "
"0000:01:00.0: 0x00000000 | time gp2\n"
"2020-09-01T11:03:11.221438-07:00 ERR kernel: [ 2448.183400] iwlwifi "
"0000:01:00.0: 0x00000000 | uCode revision type\n"
"2020-09-01T11:03:11.221440-07:00 ERR kernel: [ 2448.183404] iwlwifi "
"0000:01:00.0: 0x00000000 | uCode version major\n"
"2020-09-01T11:03:11.221443-07:00 ERR kernel: [ 2448.183408] iwlwifi "
"0000:01:00.0: 0x00000000 | uCode version minor\n"
"2020-09-01T11:03:11.221445-07:00 ERR kernel: [ 2448.183412] iwlwifi "
"0000:01:00.0: 0x00000000 | hw version\n"
"2020-09-01T11:03:11.221447-07:00 ERR kernel: [ 2448.183416] iwlwifi "
"0000:01:00.0: 0x00000000 | board version\n"
"2020-09-01T11:03:11.221449-07:00 ERR kernel: [ 2448.183419] iwlwifi "
"0000:01:00.0: 0x00000000 | hcmd\n"
"2020-09-01T11:03:11.221451-07:00 ERR kernel: [ 2448.183423] iwlwifi "
"0000:01:00.0: 0x00000000 | isr0\n"
"2020-09-01T11:03:11.221453-07:00 ERR kernel: [ 2448.183427] iwlwifi "
"0000:01:00.0: 0x00000000 | isr1\n"
"2020-09-01T11:03:11.221455-07:00 ERR kernel: [ 2448.183431] iwlwifi "
"0000:01:00.0: 0x00000000 | isr2\n"
"2020-09-01T11:03:11.221457-07:00 ERR kernel: [ 2448.183435] iwlwifi "
"0000:01:00.0: 0x00000000 | isr3\n"
"2020-09-01T11:03:11.221459-07:00 ERR kernel: [ 2448.183439] iwlwifi "
"0000:01:00.0: 0x00000000 | isr4\n"
"2020-09-01T11:03:11.221461-07:00 ERR kernel: [ 2448.183442] iwlwifi "
"0000:01:00.0: 0x00000000 | last cmd Id\n"
"2020-09-01T11:03:11.221464-07:00 ERR kernel: [ 2448.183446] iwlwifi "
"0000:01:00.0: 0x00000000 | wait_event\n"
"2020-09-01T11:03:11.221466-07:00 ERR kernel: [ 2448.183450] iwlwifi "
"0000:01:00.0: 0x00000000 | l2p_control\n"
"2020-09-01T11:03:11.221468-07:00 ERR kernel: [ 2448.183454] iwlwifi "
"0000:01:00.0: 0x00000000 | l2p_duration\n"
"2020-09-01T11:03:11.221470-07:00 ERR kernel: [ 2448.183458] iwlwifi "
"0000:01:00.0: 0x00000000 | l2p_mhvalid\n"
"2020-09-01T11:03:11.221472-07:00 ERR kernel: [ 2448.183461] iwlwifi "
"0000:01:00.0: 0x00000000 | l2p_addr_match\n"
"2020-09-01T11:03:11.221474-07:00 ERR kernel: [ 2448.183465] iwlwifi "
"0000:01:00.0: 0x00000000 | lmpm_pmg_sel\n"
"2020-09-01T11:03:11.221475-07:00 ERR kernel: [ 2448.183469] iwlwifi "
"0000:01:00.0: 0x00000000 | timestamp\n"
"2020-09-01T11:03:11.221478-07:00 ERR kernel: [ 2448.183473] iwlwifi "
"0000:01:00.0: 0x00000000 | flow_handler\n",
.expected_flags = {{"--kernel_iwlwifi_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_IWLWIFI_DRIVER_ERROR", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelIwlwifiErrorLmac) {
ParserRun wifi_error = {
.expected_text =
"[15883.337352] iwlwifi 0000:00:0c.0: Loaded firmware version: "
"46.b20aefee.0\n"
"[15883.337355] iwlwifi 0000:00:0c.0: 0x00000084 | "
"NMI_INTERRUPT_UNKNOWN\n"
"[15883.337357] iwlwifi 0000:00:0c.0: 0x000022F0 | trm_hw_status0\n"
"[15883.337359] iwlwifi 0000:00:0c.0: 0x00000000 | trm_hw_status1\n"
"[15883.337362] iwlwifi 0000:00:0c.0: 0x0048751E | branchlink2\n"
"[15883.337364] iwlwifi 0000:00:0c.0: 0x00479236 | interruptlink1\n"
"[15883.337366] iwlwifi 0000:00:0c.0: 0x0000AE00 | interruptlink2\n"
"[15883.337369] iwlwifi 0000:00:0c.0: 0x0001A2D6 | data1\n"
"[15883.337371] iwlwifi 0000:00:0c.0: 0xFF000000 | data2\n"
"[15883.337373] iwlwifi 0000:00:0c.0: 0xF0000000 | data3\n"
"[15883.337376] iwlwifi 0000:00:0c.0: 0x00000000 | beacon time\n"
"[15883.337378] iwlwifi 0000:00:0c.0: 0x158DE6F7 | tsf low\n"
"[15883.337380] iwlwifi 0000:00:0c.0: 0x00000000 | tsf hi\n"
"[15883.337383] iwlwifi 0000:00:0c.0: 0x00000000 | time gp1\n"
"[15883.337385] iwlwifi 0000:00:0c.0: 0x158DE6F9 | time gp2\n"
"[15883.337388] iwlwifi 0000:00:0c.0: 0x00000001 | uCode revision "
"type\n"
"[15883.337390] iwlwifi 0000:00:0c.0: 0x0000002E | uCode version "
"major\n"
"[15883.337392] iwlwifi 0000:00:0c.0: 0xB20AEFEE | uCode version "
"minor\n"
"[15883.337394] iwlwifi 0000:00:0c.0: 0x00000312 | hw version\n"
"[15883.337397] iwlwifi 0000:00:0c.0: 0x00C89008 | board version\n"
"[15883.337399] iwlwifi 0000:00:0c.0: 0x007B019C | hcmd\n"
"[15883.337401] iwlwifi 0000:00:0c.0: 0x00022000 | isr0\n"
"[15883.337404] iwlwifi 0000:00:0c.0: 0x00000000 | isr1\n"
"[15883.337406] iwlwifi 0000:00:0c.0: 0x08001802 | isr2\n"
"[15883.337408] iwlwifi 0000:00:0c.0: 0x40400180 | isr3\n"
"[15883.337411] iwlwifi 0000:00:0c.0: 0x00000000 | isr4\n"
"[15883.337413] iwlwifi 0000:00:0c.0: 0x007B019C | last cmd Id\n"
"[15883.337415] iwlwifi 0000:00:0c.0: 0x0001A2D6 | wait_event\n"
"[15883.337417] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_control\n"
"[15883.337420] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_duration\n"
"[15883.337422] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_mhvalid\n"
"[15883.337424] iwlwifi 0000:00:0c.0: 0x00000000 | l2p_addr_match\n"
"[15883.337427] iwlwifi 0000:00:0c.0: 0x0000008F | lmpm_pmg_sel\n"
"[15883.337429] iwlwifi 0000:00:0c.0: 0x24021230 | timestamp\n"
"[15883.337432] iwlwifi 0000:00:0c.0: 0x0000B0D8 | flow_handler\n",
.expected_flags = {{"--kernel_iwlwifi_error", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_IWLWIFI_LMAC", {wifi_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelSMMU_FAULT) {
ParserRun smmu_error = {
.expected_text =
"[ 74.047205] arm-smmu 15000000.iommu: Unhandled context fault: "
"fsr=0x402, iova=0x04367000, fsynr=0x30023, cbfrsynra=0x800, cb=5\n",
.expected_flags = {{"--kernel_smmu_fault"}}};
KernelParser parser(true);
ParserTest("TEST_SMMU_FAULT", {smmu_error}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarning) {
ParserRun second{
.find_this = "ttm_bo_vm.c",
.replace_with = "file_one.c",
.expected_text = "0x19e/0x1ab [ttm]()\n[ 3955.309298] Modules linked in",
.expected_flags = {{"--kernel_warning", "--weight=10"}}};
KernelParser parser(true);
ParserTest("TEST_WARNING", {simple_run, second}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningNoDuplicate) {
ParserRun identical_warning{.expected_size = 0};
KernelParser parser(true);
ParserTest("TEST_WARNING", {simple_run, identical_warning}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningHeader) {
ParserRun warning_message{.expected_text = "Test Warning message asdfghjkl"};
KernelParser parser(true);
ParserTest("TEST_WARNING_HEADER", {warning_message}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningOld) {
KernelParser parser(true);
ParserTest("TEST_WARNING_OLD", {simple_run}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningOldARM64) {
ParserRun unknown_function{.expected_text = "-unknown-function\n"};
KernelParser parser(true);
ParserTest("TEST_WARNING_OLD_ARM64", {unknown_function}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningWifi) {
ParserRun wifi_warning = {
.find_this = "gpu/drm/ttm",
.replace_with = "net/wireless",
.expected_flags = {{"--kernel_wifi_warning", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_WARNING", {wifi_warning}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningWifiMac80211) {
ParserRun wifi_warning = {
.expected_flags = {{"--kernel_wifi_warning", "--weight=50"}}};
KernelParser parser(true);
ParserTest("TEST_WIFI_WARNING", {wifi_warning}, &parser);
}
TEST(AnomalyDetectorTest, KernelWarningSuspend) {
ParserRun suspend_warning = {
.find_this = "gpu/drm/ttm",
.replace_with = "idle",
.expected_flags = {{"--kernel_suspend_warning", "--weight=10"}}};
KernelParser parser(true);
ParserTest("TEST_WARNING", {suspend_warning}, &parser);
}
TEST(AnomalyDetectorTest, CrashReporterCrash) {
ParserRun crash_reporter_crash = {
.expected_flags = {{"--crash_reporter_crashed"}}};
KernelParser parser(true);
ParserTest("TEST_CR_CRASH", {crash_reporter_crash}, &parser);
}
TEST(AnomalyDetectorTest, CrashReporterCrashRateLimit) {
ParserRun crash_reporter_crash = {
.expected_flags = {{"--crash_reporter_crashed"}}};
KernelParser parser(true);
ParserTest("TEST_CR_CRASH", {crash_reporter_crash, empty, empty}, &parser);
}
TEST(AnomalyDetectorTest, ServiceFailure) {
ParserRun one{.expected_text = "-exit2-"};
ParserRun two{.find_this = "crash-crash", .replace_with = "fresh-fresh"};
ServiceParser parser(true);
ParserTest("TEST_SERVICE_FAILURE", {one, two}, &parser);
}
TEST(AnomalyDetectorTest, ServiceFailureArc) {
ParserRun service_failure = {
.find_this = "crash-crash",
.replace_with = "arc-crash",
.expected_text = "-exit2-arc-",
.expected_flags = {{"--arc_service_failure=arc-crash"}}};
ServiceParser parser(true);
ParserTest("TEST_SERVICE_FAILURE", {service_failure}, &parser);
}
TEST(AnomalyDetectorTest, ServiceFailureCamera) {
ParserRun service_failure = {.find_this = "crash-crash",
.replace_with = "cros-camera",
.expected_size = 0};
ServiceParser parser(true);
ParserTest("TEST_SERVICE_FAILURE", {service_failure}, &parser);
}
TEST(AnomalyDetectorTest, SELinuxViolation) {
ParserRun selinux_violation = {
.expected_text =
"-selinux-u:r:cros_init:s0-u:r:kernel:s0-module_request-init-",
.expected_flags = {{"--selinux_violation"}}};
SELinuxParser parser(true);
ParserTest("TEST_SELINUX", {selinux_violation}, &parser);
}
TEST(AnomalyDetectorTest, SELinuxViolationPermissive) {
ParserRun selinux_violation = {.find_this = "permissive=0",
.replace_with = "permissive=1",
.expected_size = 0};
SELinuxParser parser(true);
ParserTest("TEST_SELINUX", {selinux_violation}, &parser);
}
// Verify that we skip non-CrOS selinux violations
TEST(AnomalyDetectorTest, SELinuxViolationNonCros) {
ParserRun selinux_violation = {
.find_this = "cros_init", .replace_with = "init", .expected_size = 0};
SELinuxParser parser(true);
ParserTest("TEST_SELINUX", {selinux_violation}, &parser);
}
TEST(AnomalyDetectorTest, SuspendFailure) {
ParserRun suspend_failure = {
.expected_text =
"-suspend failure: device: dummy_dev step: suspend errno: -22",
.expected_flags = {{"--suspend_failure"}}};
SuspendParser parser(true);
ParserTest("TEST_SUSPEND_FAILURE", {suspend_failure}, &parser);
}
MATCHER_P2(SignalEq, interface, member, "") {
return (arg->GetInterface() == interface && arg->GetMember() == member);
}
TEST(AnomalyDetectorTest, BTRFSExtentCorruption) {
dbus::Bus::Options options;
options.bus_type = dbus::Bus::SYSTEM;
scoped_refptr<dbus::MockBus> bus = new dbus::MockBus(options);
auto obj_path = dbus::ObjectPath(anomaly_detector::kAnomalyEventServicePath);
scoped_refptr<dbus::MockExportedObject> exported_object =
new dbus::MockExportedObject(bus.get(), obj_path);
EXPECT_CALL(*bus, GetExportedObject(Eq(obj_path)))
.WillOnce(Return(exported_object.get()));
EXPECT_CALL(*exported_object,
SendSignal(SignalEq(
anomaly_detector::kAnomalyEventServiceInterface,
anomaly_detector::kAnomalyGuestFileCorruptionSignalName)))
.Times(1);
TerminaParser parser(bus);
parser.ParseLogEntry(
3,
"BTRFS warning (device vdb): csum failed root 5 ino 257 off 409600 csum "
"0x76ad9387 expected csum 0xd8d34542 mirror 1");
}
TEST(AnomalyDetectorTest, BTRFSTreeCorruption) {
dbus::Bus::Options options;
options.bus_type = dbus::Bus::SYSTEM;
scoped_refptr<dbus::MockBus> bus = new dbus::MockBus(options);
auto obj_path = dbus::ObjectPath(anomaly_detector::kAnomalyEventServicePath);
scoped_refptr<dbus::MockExportedObject> exported_object =
new dbus::MockExportedObject(bus.get(), obj_path);
EXPECT_CALL(*bus, GetExportedObject(Eq(obj_path)))
.WillOnce(Return(exported_object.get()));
EXPECT_CALL(*exported_object,
SendSignal(SignalEq(
anomaly_detector::kAnomalyEventServiceInterface,
anomaly_detector::kAnomalyGuestFileCorruptionSignalName)))
.Times(1);
TerminaParser parser(bus);
parser.ParseLogEntry(3,
"BTRFS warning (device vdb): vdb checksum verify failed "
"on 122798080 wanted 4E5B4C99 found 5F261FEB level 0");
}
TEST(AnomalyDetectorTest, CryptohomeMountFailure) {
ParserRun cryptohome_mount_failure = {
.expected_flags = {{"--mount_failure", "--mount_device=cryptohome"}}};
ParserTest<CryptohomeParser>("TEST_CRYPTOHOME_MOUNT_FAILURE",
{cryptohome_mount_failure});
}
TEST(AnomalyDetectorTest, CryptohomeIgnoreMountFailure) {
ParserRun cryptohome_mount_failure = {.expected_size = 0};
ParserTest<CryptohomeParser>("TEST_CRYPTOHOME_MOUNT_FAILURE_IGNORE",
{cryptohome_mount_failure});
}
TEST(AnomalyDetectorTest, CryptohomeIgnoreFailedLogin) {
ParserRun cryptohome_mount_failure = {.expected_size = 0};
ParserTest<CryptohomeParser>("TEST_CRYPTOHOME_FAILED_LOGIN_IGNORE",
{cryptohome_mount_failure});
}
TEST(AnomalyDetectorTest, TcsdAuthFailure) {
ParserRun tcsd_auth_failure = {.expected_text = "b349c715-auth failure",
.expected_flags = {{"--auth_failure"}}};
ParserTest<TcsdParser>("TEST_TCSD_AUTH_FAILURE", {tcsd_auth_failure});
}
TEST(AnomalyDetectorTest, TcsdAuthFailureBlocklist) {
ParserRun tcsd_auth_failure = {.expected_size = 0};
ParserTest<TcsdParser>("TEST_TCSD_AUTH_FAILURE_BLOCKLIST",
{tcsd_auth_failure});
}