| Message ID | 20260817090503.2104998-5-peter.lin@sifive.com |
|---|---|
| State | New |
| Headers | show |
| Series | Add RISC-V Worlds ISA support to OpenSBI | expand |
On Mon, Aug 17, 2026 at 2:05 AM Yu-Chien Peter Lin <peter.lin@sifive.com> wrote: > > Lock the M-mode World ID (mwid) CSR during hart re-initialization > to enforce immutability of the WID established by the root-of-trust. > > OpenSBI does not assign the WID value itself; it only sets MWID_LOCK > to freeze the value established by prior RoT stage. The MWID_LOCK bit > at XLEN-1 is sticky and makes the CSR read-only until reset, enforcing > a temporal security boundary per the RISC-V Worlds specification. > > Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com> > --- > lib/sbi/sbi_hart.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c > index f5f4062e..29856c0f 100644 > --- a/lib/sbi/sbi_hart.c > +++ b/lib/sbi/sbi_hart.c > @@ -724,6 +724,13 @@ int sbi_hart_reinit(struct sbi_scratch *scratch) > if (rc) > return rc; > > + /* > + * Assume MWID is restored by root-of-trust M-mode in previous > + * stage. Lock mwid so RoT-defined WID remains immutable. > + */ > + if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMWID)) > + csr_set(CSR_MWID, MWID_LOCK); > + > return 0; > } > > -- > 2.43.7 > Reviewed-by: Pawandeep Oza <pawandeep.oza@oss.qualcomm.com>
diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index f5f4062e..29856c0f 100644 --- a/lib/sbi/sbi_hart.c +++ b/lib/sbi/sbi_hart.c @@ -724,6 +724,13 @@ int sbi_hart_reinit(struct sbi_scratch *scratch) if (rc) return rc; + /* + * Assume MWID is restored by root-of-trust M-mode in previous + * stage. Lock mwid so RoT-defined WID remains immutable. + */ + if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMWID)) + csr_set(CSR_MWID, MWID_LOCK); + return 0; }
Lock the M-mode World ID (mwid) CSR during hart re-initialization to enforce immutability of the WID established by the root-of-trust. OpenSBI does not assign the WID value itself; it only sets MWID_LOCK to freeze the value established by prior RoT stage. The MWID_LOCK bit at XLEN-1 is sticky and makes the CSR read-only until reset, enforcing a temporal security boundary per the RISC-V Worlds specification. Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com> --- lib/sbi/sbi_hart.c | 7 +++++++ 1 file changed, 7 insertions(+)