lkml.org 
[lkml]   [2023]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2] ACPI: sysfs: Enable ACPI sysfs support for CCEL records
    Date
    The Confidential Computing Event Log (CCEL) table provides the address
    and length of the CCEL records area in UEFI reserved memory. To access
    these records, userspace can use /dev/mem to retrieve them. But
    '/dev/mem' is not enabled on many systems for security reasons.

    So to allow user space access these event log records without the
    /dev/mem interface, add support to access it via sysfs interface. The
    ACPI driver has provided read only access to BERT records area via
    '/sys/firmware/acpi/tables/data/BERT' in sysfs. So follow the same way,
    and add support for /sys/firmware/acpi/tables/data/CCEL to enable
    read-only access to the CCEL recorids area.

    More details about the CCEL table can be found in ACPI specification
    r6.5, sec titled "CC Event Log ACPI Table".

    Original-patch-by: Haibo Xu <haibo1.xu@intel.com>
    [Original patch is for TDEL table, modified it for CCEL support]
    Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    ---

    Changes since v1:
    * Removed unnecessary parenthesis as per Rafael's suggestion..

    drivers/acpi/sysfs.c | 17 +++++++++++++++++
    1 file changed, 17 insertions(+)

    diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
    index 7f4ff56c9d42..687524b50085 100644
    --- a/drivers/acpi/sysfs.c
    +++ b/drivers/acpi/sysfs.c
    @@ -458,11 +458,28 @@ static int acpi_bert_data_init(void *th, struct acpi_data_attr *data_attr)
    return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr);
    }

    +static int acpi_ccel_data_init(void *th, struct acpi_data_attr *data_attr)
    +{
    + struct acpi_table_ccel *ccel = th;
    +
    + if (ccel->header.length < sizeof(struct acpi_table_ccel) ||
    + !ccel->log_area_start_address || !ccel->log_area_minimum_length) {
    + kfree(data_attr);
    + return -EINVAL;
    + }
    + data_attr->addr = ccel->log_area_start_address;
    + data_attr->attr.size = ccel->log_area_minimum_length;
    + data_attr->attr.attr.name = "CCEL";
    +
    + return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr);
    +}
    +
    static struct acpi_data_obj {
    char *name;
    int (*fn)(void *, struct acpi_data_attr *);
    } acpi_data_objs[] = {
    { ACPI_SIG_BERT, acpi_bert_data_init },
    + { ACPI_SIG_CCEL, acpi_ccel_data_init },
    };

    #define NUM_ACPI_DATA_OBJS ARRAY_SIZE(acpi_data_objs)
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-03-27 01:09    [W:2.419 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site