On Mon, Jan 18, 2021 at 04:28:05PM +1300, Kai Huang wrote: > Add a helper to update SGX_LEPUBKEYHASHn MSRs. SGX virtualization also > needs to update those MSRs based on guest's "virtual" SGX_LEPUBKEYHASHn > before EINIT from guest. > > Acked-by: Dave Hansen <dave.hansen@xxxxxxxxx> > Signed-off-by: Kai Huang <kai.huang@xxxxxxxxx> > --- > arch/x86/kernel/cpu/sgx/ioctl.c | 5 ++--- > arch/x86/kernel/cpu/sgx/main.c | 8 ++++++++ > arch/x86/kernel/cpu/sgx/sgx.h | 2 ++ > 3 files changed, 12 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c > index e5977752c7be..1bae754268d1 100644 > --- a/arch/x86/kernel/cpu/sgx/ioctl.c > +++ b/arch/x86/kernel/cpu/sgx/ioctl.c > @@ -495,7 +495,7 @@ static int sgx_encl_init(struct sgx_encl *encl, struct sgx_sigstruct *sigstruct, > void *token) > { > u64 mrsigner[4]; > - int i, j, k; > + int i, j; > void *addr; > int ret; > > @@ -544,8 +544,7 @@ static int sgx_encl_init(struct sgx_encl *encl, struct sgx_sigstruct *sigstruct, > > preempt_disable(); > > - for (k = 0; k < 4; k++) > - wrmsrl(MSR_IA32_SGXLEPUBKEYHASH0 + k, mrsigner[k]); > + sgx_update_lepubkeyhash(mrsigner); > > ret = __einit(sigstruct, token, addr); > > diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c > index bdda631c975b..1cf1f0f058b8 100644 > --- a/arch/x86/kernel/cpu/sgx/main.c > +++ b/arch/x86/kernel/cpu/sgx/main.c > @@ -697,6 +697,14 @@ static bool __init sgx_page_cache_init(void) > return true; > } > > +void sgx_update_lepubkeyhash(u64 *lepubkeyhash) > +{ > + int i; > + > + for (i = 0; i < 4; i++) > + wrmsrl(MSR_IA32_SGXLEPUBKEYHASH0 + i, lepubkeyhash[i]); > +} Missing kdoc. > + > static void __init sgx_init(void) > { > int ret; > diff --git a/arch/x86/kernel/cpu/sgx/sgx.h b/arch/x86/kernel/cpu/sgx/sgx.h > index 509f2af33e1d..ccd4f145c464 100644 > --- a/arch/x86/kernel/cpu/sgx/sgx.h > +++ b/arch/x86/kernel/cpu/sgx/sgx.h > @@ -83,4 +83,6 @@ void sgx_mark_page_reclaimable(struct sgx_epc_page *page); > int sgx_unmark_page_reclaimable(struct sgx_epc_page *page); > struct sgx_epc_page *sgx_alloc_epc_page(void *owner, bool reclaim); > > +void sgx_update_lepubkeyhash(u64 *lepubkeyhash); > + > #endif /* _X86_SGX_H */ > -- > 2.29.2 > > /Jarkko