lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cf6581ad2d9846fbaf7ff8b5d424eeeb@huawei.com>
Date: Tue, 6 Aug 2024 09:15:56 +0000
From: Shiju Jose <shiju.jose@...wei.com>
To: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
CC: Jonathan Cameron <jonathan.cameron@...wei.com>, "Michael S. Tsirkin"
	<mst@...hat.com>, Ani Sinha <anisinha@...hat.com>, Dongjiu Geng
	<gengdongjiu1@...il.com>, Eric Blake <eblake@...hat.com>, Igor Mammedov
	<imammedo@...hat.com>, Markus Armbruster <armbru@...hat.com>, Michael Roth
	<michael.roth@....com>, Paolo Bonzini <pbonzini@...hat.com>, Peter Maydell
	<peter.maydell@...aro.org>, "linux-kernel@...r.kernel.org"
	<linux-kernel@...r.kernel.org>, "qemu-arm@...gnu.org" <qemu-arm@...gnu.org>,
	"qemu-devel@...gnu.org" <qemu-devel@...gnu.org>
Subject: RE: [PATCH v5 5/7] qapi/ghes-cper: add an interface to do generic
 CPER error injection



>-----Original Message-----
>From: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
>Sent: 02 August 2024 22:44
>Cc: Jonathan Cameron <jonathan.cameron@...wei.com>; Shiju Jose
><shiju.jose@...wei.com>; Mauro Carvalho Chehab
><mchehab+huawei@...nel.org>; Michael S. Tsirkin <mst@...hat.com>; Ani
>Sinha <anisinha@...hat.com>; Dongjiu Geng <gengdongjiu1@...il.com>; Eric
>Blake <eblake@...hat.com>; Igor Mammedov <imammedo@...hat.com>;
>Markus Armbruster <armbru@...hat.com>; Michael Roth
><michael.roth@....com>; Paolo Bonzini <pbonzini@...hat.com>; Peter
>Maydell <peter.maydell@...aro.org>; linux-kernel@...r.kernel.org; qemu-
>arm@...gnu.org; qemu-devel@...gnu.org
>Subject: [PATCH v5 5/7] qapi/ghes-cper: add an interface to do generic CPER
>error injection
>
>Creates a QMP command to be used for generic ACPI APEI hardware error
>injection (HEST) via GHESv2.
>
>The actual GHES code will be added at the followup patch.
>
>Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
Few minor comments inline.
Signed-off-by: Shiju Jose <shiju.jose@...wei.com>

>---
> MAINTAINERS              |  7 +++++
> hw/acpi/Kconfig          |  5 ++++
> hw/acpi/ghes_cper.c      | 45 ++++++++++++++++++++++++++++++++
> hw/acpi/ghes_cper_stub.c | 18 +++++++++++++
> hw/acpi/meson.build      |  2 ++
> hw/arm/Kconfig           |  5 ++++
> include/hw/acpi/ghes.h   |  7 +++++
> qapi/ghes-cper.json      | 55 ++++++++++++++++++++++++++++++++++++++++
> qapi/meson.build         |  1 +
> qapi/qapi-schema.json    |  1 +
> 10 files changed, 146 insertions(+)
> create mode 100644 hw/acpi/ghes_cper.c
> create mode 100644 hw/acpi/ghes_cper_stub.c  create mode 100644
>qapi/ghes-cper.json
>
>diff --git a/MAINTAINERS b/MAINTAINERS
>index 98eddf7ae155..655edcb6688c 100644
>--- a/MAINTAINERS
>+++ b/MAINTAINERS
>@@ -2075,6 +2075,13 @@ F: hw/acpi/ghes.c
> F: include/hw/acpi/ghes.h
> F: docs/specs/acpi_hest_ghes.rst
>
>+ACPI/HEST/GHES/ARM processor CPER
>+R: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
>+S: Maintained
>+F: hw/arm/ghes_cper.c
>+F: hw/acpi/ghes_cper_stub.c
>+F: qapi/ghes-cper.json
>+
> ppc4xx
> L: qemu-ppc@...gnu.org
> S: Orphan
>diff --git a/hw/acpi/Kconfig b/hw/acpi/Kconfig index
>e07d3204eb36..73ffbb82c150 100644
>--- a/hw/acpi/Kconfig
>+++ b/hw/acpi/Kconfig
>@@ -51,6 +51,11 @@ config ACPI_APEI
>     bool
>     depends on ACPI
>
>+config GHES_CPER
>+    bool
>+    depends on ACPI_APEI
>+    default y
>+
> config ACPI_PCI
>     bool
>     depends on ACPI && PCI
>diff --git a/hw/acpi/ghes_cper.c b/hw/acpi/ghes_cper.c new file mode 100644
>index 000000000000..7aa7e71e90dc
>--- /dev/null
>+++ b/hw/acpi/ghes_cper.c
>@@ -0,0 +1,45 @@
>+/*
>+ * ARM Processor error injection
>+ *
>+ * Copyright(C) 2024 Huawei LTD.
>+ *
>+ * This code is licensed under the GPL version 2 or later. See the
>+ * COPYING file in the top-level directory.
>+ *
>+ */
>+
>+#include "qemu/osdep.h"
>+
>+#include "qemu/base64.h"
>+#include "qemu/error-report.h"
>+#include "qemu/uuid.h"
>+#include "qapi/qapi-commands-ghes-cper.h"
>+#include "hw/acpi/ghes.h"
>+
>+void qmp_ghes_cper(CommonPlatformErrorRecord *qmp_cper,
>+                   Error **errp)
>+{
>+    int rc;
>+    AcpiGhesCper cper;
>+    QemuUUID be_uuid, le_uuid;
>+
>+    rc = qemu_uuid_parse(qmp_cper->notification_type, &be_uuid);
>+    if (rc) {
>+        error_setg(errp, "GHES: Invalid UUID: %s",
>+                   qmp_cper->notification_type);
>+        return;
>+    }
>+
>+    le_uuid = qemu_uuid_bswap(be_uuid);
>+    cper.guid = le_uuid.data;
>+
>+    cper.data = qbase64_decode(qmp_cper->raw_data, -1,
>+                               &cper.data_len, errp);
>+    if (!cper.data) {
>+        return;
>+    }
>+
>+    /* TODO: call a function at ghes */
>+
>+    g_free(cper.data);
>+}
>diff --git a/hw/acpi/ghes_cper_stub.c b/hw/acpi/ghes_cper_stub.c new file
>mode 100644 index 000000000000..7ce6ed70a265
>--- /dev/null
>+++ b/hw/acpi/ghes_cper_stub.c
>@@ -0,0 +1,18 @@
>+/*
>+ * ARM Processor error injection
>+ *
>+ * Copyright(C) 2024 Huawei LTD.
>+ *
>+ * This code is licensed under the GPL version 2 or later. See the
>+ * COPYING file in the top-level directory.
>+ *
>+ */
>+
>+#include "qemu/osdep.h"
>+#include "qapi/error.h"
>+#include "qapi/qapi-commands-ghes-cper.h"
>+#include "hw/acpi/ghes.h"
>+
>+void qmp_ghes_cper(CommonPlatformErrorRecord *cper, Error **errp) { }
May be add an unsupported or similar log in the stub function? 

>diff --git a/hw/acpi/meson.build b/hw/acpi/meson.build index
>fa5c07db9068..6cbf430eb66d 100644
>--- a/hw/acpi/meson.build
>+++ b/hw/acpi/meson.build
>@@ -34,4 +34,6 @@ endif
> system_ss.add(when: 'CONFIG_ACPI', if_false: files('acpi-stub.c', 'aml-build-
>stub.c', 'ghes-stub.c', 'acpi_interface.c'))
> system_ss.add(when: 'CONFIG_ACPI_PCI_BRIDGE', if_false: files('pci-bridge-
>stub.c'))
> system_ss.add_all(when: 'CONFIG_ACPI', if_true: acpi_ss)
>+system_ss.add(when: 'CONFIG_GHES_CPER', if_true: files('ghes_cper.c'))
>+system_ss.add(when: 'CONFIG_GHES_CPER', if_false:
>+files('ghes_cper_stub.c'))
> system_ss.add(files('acpi-qmp-cmds.c'))
>diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index
>1ad60da7aa2d..bed6ba27d715 100644
>--- a/hw/arm/Kconfig
>+++ b/hw/arm/Kconfig
>@@ -712,3 +712,8 @@ config ARMSSE
>     select UNIMP
>     select SSE_COUNTER
>     select SSE_TIMER
>+
>+config GHES_CPER
>+    bool
>+    depends on ARM
>+    default y if AARCH64
>diff --git a/include/hw/acpi/ghes.h b/include/hw/acpi/ghes.h index
>33be1eb5acf4..06a5b8820cd5 100644
>--- a/include/hw/acpi/ghes.h
>+++ b/include/hw/acpi/ghes.h
>@@ -23,6 +23,7 @@
> #define ACPI_GHES_H
>
> #include "hw/acpi/bios-linker-loader.h"
>+#include "qapi/error.h"
> #include "qemu/notify.h"
>
> extern NotifierList generic_error_notifiers; @@ -78,6 +79,12 @@ void
>acpi_ghes_add_fw_cfg(AcpiGhesState *vms, FWCfgState *s,
>                           GArray *hardware_errors);  int
>acpi_ghes_record_errors(uint8_t notify, uint64_t error_physical_addr);
>
>+typedef struct AcpiGhesCper {
>+    uint8_t *guid;
>+    uint8_t *data;
>+    size_t data_len;
>+} AcpiGhesCper;
>+
> /**
>  * acpi_ghes_present: Report whether ACPI GHES table is present
>  *
>diff --git a/qapi/ghes-cper.json b/qapi/ghes-cper.json new file mode 100644
>index 000000000000..3cc4f9f2aaa9
>--- /dev/null
>+++ b/qapi/ghes-cper.json
>@@ -0,0 +1,55 @@
>+# -*- Mode: Python -*-
>+# vim: filetype=python
>+
>+##
>+# = GHESv2 CPER Error Injection
>+#
>+# These are defined at
>+# ACPI 6.2: 18.3.2.8 Generic Hardware Error Source version 2 # (GHESv2
>+- Type 10) ##
>+
>+##
>+# @CommonPlatformErrorRecord:
>+#
>+# Common Platform Error Record - CPER - as defined at the UEFI #
>+specification.  See #
>+https://uefi.org/specs/UEFI/2.10/Apx_N_Common_Platform_Error_Record.htm
>+l#record-header
>+# for more details.
>+#
>+# @notification-type: pre-assigned GUID string indicating the record
>+#   association with an error event notification type, as defined
>+#   at
>https://uefi.org/specs/UEFI/2.10/Apx_N_Common_Platform_Error_Record.html
>#record-header
>+#
>+# @raw-data: Contains a base64 encoded string with the payload of
>+#   the CPER.
>+#
>+# Since: 9.2
>+##
>+{ 'struct': 'CommonPlatformErrorRecord',
>+  'data': {
>+      'notification-type': 'str',
>+      'raw-data': 'str'
>+  }
>+}
>+
>+##
>+# @ghes-cper:
>+#
>+# Inject ARM Processor error with data to be filled according with #
>+ACPI 6.2 GHESv2 spec.
 Since ghes-cper is  generic interface, mentioning term "ARM Processor error" here may not be appropriate?  

>+#
>+# @cper: a single CPER record to be sent to the guest OS.
>+#
>+# Features:
>+#
>+# @unstable: This command is experimental.
>+#
>+# Since: 9.2
>+##
>+{ 'command': 'ghes-cper',
>+  'data': {
>+    'cper': 'CommonPlatformErrorRecord'
>+  },
>+  'features': [ 'unstable' ]
>+}
>diff --git a/qapi/meson.build b/qapi/meson.build index
>e7bc54e5d047..bd13cd7d40c9 100644
>--- a/qapi/meson.build
>+++ b/qapi/meson.build
>@@ -35,6 +35,7 @@ qapi_all_modules = [
>   'dump',
>   'ebpf',
>   'error',
>+  'ghes-cper',
>   'introspect',
>   'job',
>   'machine-common',
>diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json index
>b1581988e4eb..c1a267399fe5 100644
>--- a/qapi/qapi-schema.json
>+++ b/qapi/qapi-schema.json
>@@ -75,6 +75,7 @@
> { 'include': 'misc-target.json' }
> { 'include': 'audio.json' }
> { 'include': 'acpi.json' }
>+{ 'include': 'ghes-cper.json' }
> { 'include': 'pci.json' }
> { 'include': 'stats.json' }
> { 'include': 'virtio.json' }
>--
>2.45.2

Thanks,
Shiju

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ