[PATCH][V3] dmicheck: skip scanning smbios in /dev/mem on aarch64

Alex Hung alex.hung at canonical.com
Mon Nov 22 22:46:47 UTC 2021


On Mon, Nov 22, 2021 at 2:44 PM Sunny Wang <Sunny.Wang at arm.com> wrote:

> Hi Alex,
>
> Edhaya and I just tested the v2 patch by cherry-picking it into our ACS
> FWTS, and then somehow this fix doesn’t work.
> Does it work on your side? Could you build the FWTS live image with this
> fix and offline share it with us for verification?
>

Yes it worked on my RPI4. The attached results.log contains two runs: 1st
run with patch (runs to completion) and 2nd run without the patch (stopped
in test 1)

The fwts-live requires released version of fwts so it's not possible
without major modifications. If it doesn't work I think the patch may not
fix but hide the error on my systems. We will have to revisit the bug again.



>
> Best Regards,
> Sunny
> -----Original Message-----
> From: fwts-devel <fwts-devel-bounces at lists.ubuntu.com> On Behalf Of Alex
> Hung
> Sent: 22 November 2021 02:15
> To: fwts-devel at lists.ubuntu.com
> Subject: [PATCH][V3] dmicheck: skip scanning smbios in /dev/mem on aarch64
>
> Buglink: https://bugs.launchpad.net/bugs/1947786
>
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
>  src/dmi/dmicheck/dmicheck.c   | 14 +++++++
>  src/lib/include/fwts.h        |  1 +
>  src/lib/include/fwts_kernel.h | 25 ++++++++++++
>  src/lib/src/Makefile.am       |  1 +
>  src/lib/src/fwts_kernel.c     | 74 +++++++++++++++++++++++++++++++++++
>  5 files changed, 115 insertions(+)
>  create mode 100644 src/lib/include/fwts_kernel.h
>  create mode 100644 src/lib/src/fwts_kernel.c
>
> diff --git a/src/dmi/dmicheck/dmicheck.c b/src/dmi/dmicheck/dmicheck.c
> index 7f6a90c4..3985b126 100644
> --- a/src/dmi/dmicheck/dmicheck.c
> +++ b/src/dmi/dmicheck/dmicheck.c
> @@ -381,6 +381,13 @@ static void* dmi_table_smbios(fwts_framework *fw,
> fwts_smbios_entry *entry)
>                 free(table);
>         }
>
> +#ifdef FWTS_ARCH_AARCH64
> +       if (fwts_kernel_config_set("CONFIG_STRICT_DEVMEM")) {
> +               fwts_warning(fw, "Skipping scanning SMBIOS table in memory
> for arm64 systems");
> +               return NULL;
> +       }
> +#endif
> +
>         mem = fwts_mmap(addr, length);
>         if (mem != FWTS_MAP_FAILED) {
>                 /* Can we safely copy the table? */
> @@ -429,6 +436,13 @@ static void* dmi_table_smbios30(fwts_framework *fw,
> fwts_smbios30_entry *entry)
>                 free(table);
>         }
>
> +#ifdef FWTS_ARCH_AARCH64
> +       if (fwts_kernel_config_set("CONFIG_STRICT_DEVMEM")) {
> +               fwts_warning(fw, "Skipping scanning SMBIOS3 table in
> memory for arm64 systems");
> +               return NULL;
> +       }
> +#endif
> +
>         mem = fwts_mmap(addr, length);
>         if (mem != FWTS_MAP_FAILED) {
>                 /* Can we safely copy the table? */
> diff --git a/src/lib/include/fwts.h b/src/lib/include/fwts.h
> index 551a4e09..be754a99 100644
> --- a/src/lib/include/fwts.h
> +++ b/src/lib/include/fwts.h
> @@ -185,6 +185,7 @@
>  #include "fwts_iasl.h"
>  #include "fwts_ipmi.h"
>  #include "fwts_klog.h"
> +#include "fwts_kernel.h"
>  #include "fwts_olog.h"
>  #include "fwts_pipeio.h"
>  #include "fwts_stringextras.h"
> diff --git a/src/lib/include/fwts_kernel.h b/src/lib/include/fwts_kernel.h
> new file mode 100644
> index 00000000..a89576ae
> --- /dev/null
> +++ b/src/lib/include/fwts_kernel.h
> @@ -0,0 +1,25 @@
> +/*
> + * Copyright (C) 2021 Canonical
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301, USA.
> + *
> + */
> +
> +#ifndef __FWTS_KERNEL_H__
> +#define __FWTS_KERNEL_H__
> +
> +bool fwts_kernel_config_set(const char *config);
> +
> +#endif
> diff --git a/src/lib/src/Makefile.am b/src/lib/src/Makefile.am
> index 55c52b41..0a39882a 100644
> --- a/src/lib/src/Makefile.am
> +++ b/src/lib/src/Makefile.am
> @@ -83,6 +83,7 @@ libfwts_la_SOURCES =          \
>         fwts_ioport.c           \
>         fwts_ipmi.c             \
>         fwts_json.c             \
> +       fwts_kernel.c           \
>         fwts_keymap.c           \
>         fwts_klog.c             \
>         fwts_olog.c             \
> diff --git a/src/lib/src/fwts_kernel.c b/src/lib/src/fwts_kernel.c
> new file mode 100644
> index 00000000..10d11a99
> --- /dev/null
> +++ b/src/lib/src/fwts_kernel.c
> @@ -0,0 +1,74 @@
> +/*
> + * Copyright (C) 2021 Canonical
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301, USA.
> + *
> + */
> +
> +#include <sys/utsname.h>
> +
> +#include "fwts.h"
> +#include "fwts_kernel.h"
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <bsd/string.h>
> +
> +#define CONFIG_FILE_PREFIX     "/boot/config-"
> +
> +/*
> + *  fwts_kernel_config_set
> + *      check whether a kernel config is set, ex.
> + *      true if CONFIG_XYZ=y or CONFIG_XYZ=m
> + */
> +bool fwts_kernel_config_set(const char *config)
> +{
> +       const size_t config_str_len = strlen(config) + 3;
> +       char config_file[PATH_MAX];
> +       char config_str[255];
> +       size_t config_file_len;
> +       fwts_list* config_list;
> +       fwts_list_link *item;
> +       struct utsname buf;
> +
> +       /* get path of config file, i.e. /boot/config-5.11.0-38-generic */
> +       uname(&buf);
> +       config_file_len = strlen(CONFIG_FILE_PREFIX) + strlen(buf.release)
> + 1;
> +       (void)strlcpy(config_file, CONFIG_FILE_PREFIX, config_file_len);
> +       (void)strlcat(config_file, buf.release, config_file_len);
> +
> +       config_list = fwts_file_open_and_read(config_file);
> +       if (config_list == NULL)
> +               return false;
> +
> +       fwts_list_foreach(item, config_list) {
> +               /* check built-in, i.e. =y */
> +               (void)strlcpy(config_str, config, config_str_len);
> +               (void)strlcat(config_str, "=y", config_str_len);
> +               if (!strncmp(fwts_text_list_text(item), config_str,
> strlen(config_str))) {
> +                       fwts_list_free(config_list, free);
> +                       return true;
> +               }
> +
> +               /* check module, i.e. =m */
> +               config_str[strlen(config_str) - 1] = 'm';
> +               if (!strncmp(fwts_text_list_text(item), config_str,
> strlen(config_str))) {
> +                       fwts_list_free(config_list, free);
> +                       return true;
> +               }
> +       }
> +
> +       fwts_list_free(config_list, free);
> +       return false;
> +}
> --
> 2.32.0
>
>
> --
> fwts-devel mailing list
> fwts-devel at lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/fwts-devel
> IMPORTANT NOTICE: The contents of this email and any attachments are
> confidential and may also be privileged. If you are not the intended
> recipient, please notify the sender immediately and do not disclose the
> contents to any other person, use it for any purpose, or store or copy the
> information in any medium. Thank you.
>


-- 
Cheers,
Alex Hung
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20211122/98afaca0/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: results.log
Type: text/x-log
Size: 5984 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20211122/98afaca0/attachment-0001.bin>


More information about the fwts-devel mailing list