From: Deepak Gupta <debug@rivosinc.com>
To: opensbi@lists.infradead.org
Subject: [PATCH v3 4/4] lib: sbi: fwft: implement landing pad and shadow stack fwft interface
Date: Thu, 22 Aug 2024 10:48:28 -0700 [thread overview]
Message-ID: <20240822174828.4031332-5-debug@rivosinc.com> (raw)
In-Reply-To: <20240822174828.4031332-1-debug@rivosinc.com>
Supervisor software can enable control flow integrity features for itself
using fwft feature `SBI_FWFT_LANDING_PAD` and `SBI_FWFT_SHADOW_STACK`.
This patch implements the mechanism to enable both these fwft.
Signed-off-by: Deepak Gupta <debug@rivosinc.com>
---
lib/sbi/sbi_fwft.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c
index ef881ef..747bc88 100644
--- a/lib/sbi/sbi_fwft.c
+++ b/lib/sbi/sbi_fwft.c
@@ -145,6 +145,68 @@ static int fwft_get_adue(struct fwft_config *conf, unsigned long *value)
return SBI_OK;
}
+static int fwft_lpad_supported(struct fwft_config *conf)
+{
+ if (!sbi_hart_has_extension(sbi_scratch_thishart_ptr(),
+ SBI_HART_EXT_ZICFILP))
+ return SBI_ENOTSUPP;
+
+ return SBI_OK;
+}
+
+static int fwft_enable_lpad(struct fwft_config *conf, unsigned long value)
+{
+ if (value == 1)
+ csr_set(CSR_MENVCFG, ENVCFG_LPE);
+ else if (value == 0)
+ csr_clear(CSR_MENVCFG, ENVCFG_LPE);
+ else
+ return SBI_EINVAL;
+
+ return SBI_OK;
+}
+
+static int fwft_get_lpad(struct fwft_config *conf, unsigned long *value)
+{
+ unsigned long cfg;
+
+ cfg = csr_read(CSR_MENVCFG) & ENVCFG_LPE;
+ *value = cfg != 0;
+
+ return SBI_OK;
+}
+
+static int fwft_sstack_supported(struct fwft_config *conf)
+{
+ if (!sbi_hart_has_extension(sbi_scratch_thishart_ptr(),
+ SBI_HART_EXT_ZICFISS))
+ return SBI_ENOTSUPP;
+
+ return SBI_OK;
+}
+
+static int fwft_enable_sstack(struct fwft_config *conf, unsigned long value)
+{
+ if (value == 1)
+ csr_set(CSR_MENVCFG, ENVCFG_SSE);
+ else if (value == 0)
+ csr_clear(CSR_MENVCFG, ENVCFG_SSE);
+ else
+ return SBI_EINVAL;
+
+ return SBI_OK;
+}
+
+static int fwft_get_sstack(struct fwft_config *conf, unsigned long *value)
+{
+ unsigned long cfg;
+
+ cfg = csr_read(CSR_MENVCFG) & ENVCFG_SSE;
+ *value = cfg != 0;
+
+ return SBI_OK;
+}
+
static struct fwft_config* get_feature_config(enum sbi_fwft_feature_t feature)
{
int i;
@@ -236,6 +298,18 @@ static const struct fwft_feature features[] =
.set = fwft_set_adue,
.get = fwft_get_adue,
},
+ {
+ .id = SBI_FWFT_LANDING_PAD,
+ .supported = fwft_lpad_supported,
+ .set = fwft_enable_lpad,
+ .get = fwft_get_lpad,
+ },
+ {
+ .id = SBI_FWFT_SHADOW_STACK,
+ .supported = fwft_sstack_supported,
+ .set = fwft_enable_sstack,
+ .get = fwft_get_sstack,
+ },
};
int sbi_fwft_init(struct sbi_scratch *scratch, bool cold_boot)
--
2.44.0
prev parent reply other threads:[~2024-08-22 17:48 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 17:48 [PATCH v3 0/4] zicfilp and zicfiss support in opensbi Deepak Gupta
2024-08-22 17:48 ` [PATCH v3 1/4] include: adding support for Zicfilp / Zicfiss encodings Deepak Gupta
2024-08-22 17:48 ` [PATCH v3 2/4] lib: sbi: Zicfilp/Zicfiss detection and elp cfi state reflect back in status Deepak Gupta
2024-08-22 18:14 ` Deepak Gupta
2024-08-22 17:48 ` [PATCH v3 3/4] lib: sbi: sw check exception delegation Deepak Gupta
2024-08-22 17:48 ` Deepak Gupta [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=20240822174828.4031332-5-debug@rivosinc.com \
--to=debug@rivosinc.com \
--cc=opensbi@lists.infradead.org \
/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.