From: Jarkko Sakkinen <jarkko@kernel.org>
To: Thomas Tai <thomas.tai@oracle.com>
Cc: tony.luck@intel.com, dave.hansen@linux.intel.com,
reinette.chatre@intel.com, linmiaohe@huawei.com,
akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, naoya.horiguchi@nec.com
Subject: Re: [PATCH V3 1/1] x86/sgx: Add code to inject hwpoison into SGX memory
Date: Sun, 23 Oct 2022 07:30:21 +0300 [thread overview]
Message-ID: <Y1TDXd/l9OA53XVs@kernel.org> (raw)
In-Reply-To: <20221017223305.578073-2-thomas.tai@oracle.com>
On Mon, Oct 17, 2022 at 06:33:05PM -0400, Thomas Tai wrote:
> Inspired by commit c6acb1e7bf46 ("x86/sgx: Add hook to error injection
> address validation"), add a similar code in hwpoison_inject function to
> check if the address is located in SGX Memory. The error will then be
> handled by the arch_memory_failure function in the SGX driver. After
> injection, the action_result() will print out the page type and the
> action taken.
>
> Signed-off-by: Thomas Tai <thomas.tai@oracle.com>
> ---
> Documentation/mm/hwpoison.rst | 24 ++++++++++++++++++++++++
> include/linux/mm.h | 1 +
> include/ras/ras_event.h | 1 +
> mm/hwpoison-inject.c | 4 ++++
> mm/memory-failure.c | 5 ++++-
> 5 files changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/mm/hwpoison.rst b/Documentation/mm/hwpoison.rst
> index b9d5253c1305..100894bb020c 100644
> --- a/Documentation/mm/hwpoison.rst
> +++ b/Documentation/mm/hwpoison.rst
> @@ -162,6 +162,30 @@ Testing
>
> Some portable hwpoison test programs in mce-test, see below.
>
> +* Special notes for injection into SGX enclaves
> +
> + 1) Determine physical address of enclave page
> +
> + dmesg | grep "sgx: EPC"
> +
> + sgx: EPC section 0x8000c00000-0x807f7fffff
> + sgx: EPC section 0x10000c00000-0x1007fffffff
> +
> + 2) Convert the EPC address to page frame number.
> +
> + For 4K page size, the page frame number for 0x8000c00000 is
> + 0x8000c00000 / 0x1000 = 0x8000c00.
> +
> + 3) Inject a memory error
> +
> + modprobe hwpoison-inject
> + echo "0x8000c00" > /sys/kernel/debug/hwpoison/corrupt-pfn
> +
> + 4) Check dmesg output
> +
> + dmesg | grep "Memory failure"
> + Memory failure: 0x8000c00: recovery action for sgx page: Recovered
> +
> References
> ==========
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 21f8b27bd9fd..cdca3ff1418c 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -3248,6 +3248,7 @@ enum mf_action_page_type {
> MF_MSG_BUDDY,
> MF_MSG_DAX,
> MF_MSG_UNSPLIT_THP,
> + MF_MSG_SGX,
> MF_MSG_UNKNOWN,
> };
>
> diff --git a/include/ras/ras_event.h b/include/ras/ras_event.h
> index cbd3ddd7c33d..ee3a925c1e9d 100644
> --- a/include/ras/ras_event.h
> +++ b/include/ras/ras_event.h
> @@ -373,6 +373,7 @@ TRACE_EVENT(aer_event,
> EM ( MF_MSG_BUDDY, "free buddy page" ) \
> EM ( MF_MSG_DAX, "dax page" ) \
> EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" ) \
> + EM ( MF_MSG_SGX, "sgx page" ) \
> EMe ( MF_MSG_UNKNOWN, "unknown page" )
>
> /*
> diff --git a/mm/hwpoison-inject.c b/mm/hwpoison-inject.c
> index 65e242b5a432..141eeeb793b1 100644
> --- a/mm/hwpoison-inject.c
> +++ b/mm/hwpoison-inject.c
> @@ -21,6 +21,10 @@ static int hwpoison_inject(void *data, u64 val)
> if (!capable(CAP_SYS_ADMIN))
> return -EPERM;
>
> + /* Inject the error if the page is part of the processor reserved memory */
> + if (arch_is_platform_page(pfn << PAGE_SHIFT))
> + goto inject;
> +
> if (!pfn_valid(pfn))
> return -ENXIO;
>
> diff --git a/mm/memory-failure.c b/mm/memory-failure.c
> index 14439806b5ef..40a22b23b50a 100644
> --- a/mm/memory-failure.c
> +++ b/mm/memory-failure.c
> @@ -781,6 +781,7 @@ static const char * const action_page_types[] = {
> [MF_MSG_BUDDY] = "free buddy page",
> [MF_MSG_DAX] = "dax page",
> [MF_MSG_UNSPLIT_THP] = "unsplit thp",
> + [MF_MSG_SGX] = "sgx page",
> [MF_MSG_UNKNOWN] = "unknown page",
> };
>
> @@ -1990,8 +1991,10 @@ int memory_failure(unsigned long pfn, int flags)
> p = pfn_to_online_page(pfn);
> if (!p) {
> res = arch_memory_failure(pfn, flags);
> - if (res == 0)
> + if (res == 0) {
> + action_result(pfn, MF_MSG_SGX, MF_RECOVERED);
> goto unlock_mutex;
> + }
>
> if (pfn_valid(pfn)) {
> pgmap = get_dev_pagemap(pfn, NULL);
> --
> 2.31.1
>
Acked-by: Jarkko Sakkinen <jarkko.sakkinen@iki.fi>
BR, Jarkko
prev parent reply other threads:[~2022-10-23 4:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-17 22:33 [PATCH V3 0/1] x86/sgx: Add code to inject hwpoison into SGX memory Thomas Tai
2022-10-17 22:33 ` [PATCH V3 1/1] " Thomas Tai
2022-10-18 2:21 ` HORIGUCHI NAOYA(堀口 直也)
2022-10-18 6:21 ` Miaohe Lin
2022-10-23 4:30 ` Jarkko Sakkinen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y1TDXd/l9OA53XVs@kernel.org \
--to=jarkko@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=dave.hansen@linux.intel.com \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=naoya.horiguchi@nec.com \
--cc=reinette.chatre@intel.com \
--cc=thomas.tai@oracle.com \
--cc=tony.luck@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.