Message ID | 1535019956-23539-3-git-send-email-pmorel@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: vsie: Consolidate CRYCB validation | expand |
On 08/23/2018 12:25 PM, Pierre Morel wrote: > When entering the SIE the CRYCB validation better > be done independently of the instruction's > availability. Maybe something like We need to handle the validity checks for the crycb, no matter what the settings for the keywrappings are. So lets move the keywrapping checks after we have done the validy checks. ? > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> > --- > arch/s390/kvm/vsie.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c > index 12b9707..38ea5da 100644 > --- a/arch/s390/kvm/vsie.c > +++ b/arch/s390/kvm/vsie.c > @@ -161,17 +161,18 @@ static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) > /* format-1 is supported with message-security-assist extension 3 */ > if (!test_kvm_facility(vcpu->kvm, 76)) > return 0; > - /* we may only allow it if enabled for guest 2 */ > - ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & > - (ECB3_AES | ECB3_DEA); > - if (!ecb3_flags) > - return 0; > > if ((crycb_addr & PAGE_MASK) != ((crycb_addr + 128) & PAGE_MASK)) > return set_validity_icpt(scb_s, 0x003CU); > else if (!crycb_addr) > return set_validity_icpt(scb_s, 0x0039U); > > + /* we may only allow it if enabled for guest 2 */ > + ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & > + (ECB3_AES | ECB3_DEA); > + if (!ecb3_flags) > + return 0; > + > /* copy only the wrapping keys */ > if (read_guest_real(vcpu, crycb_addr + 72, > vsie_page->crycb.dea_wrapping_key_mask, 56)) >
On 23.08.2018 13:17, Christian Borntraeger wrote: > > > On 08/23/2018 12:25 PM, Pierre Morel wrote: >> When entering the SIE the CRYCB validation better >> be done independently of the instruction's >> availability. > > Maybe something like > > We need to handle the validity checks for the crycb, no matter what the > settings for the keywrappings are. So lets move the keywrapping checks > after we have done the validy checks. > > ? With that Reviewed-by: David Hildenbrand <david@redhat.com>
On 23/08/2018 13:17, Christian Borntraeger wrote: > > > On 08/23/2018 12:25 PM, Pierre Morel wrote: >> When entering the SIE the CRYCB validation better >> be done independently of the instruction's >> availability. > > Maybe something like > > We need to handle the validity checks for the crycb, no matter what the > settings for the keywrappings are. So lets move the keywrapping checks > after we have done the validy checks. > > ? OK thanks, I use this. regards, Pierre > >> >> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> >> --- >> arch/s390/kvm/vsie.c | 11 ++++++----- >> 1 file changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c >> index 12b9707..38ea5da 100644 >> --- a/arch/s390/kvm/vsie.c >> +++ b/arch/s390/kvm/vsie.c >> @@ -161,17 +161,18 @@ static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) >> /* format-1 is supported with message-security-assist extension 3 */ >> if (!test_kvm_facility(vcpu->kvm, 76)) >> return 0; >> - /* we may only allow it if enabled for guest 2 */ >> - ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & >> - (ECB3_AES | ECB3_DEA); >> - if (!ecb3_flags) >> - return 0; >> >> if ((crycb_addr & PAGE_MASK) != ((crycb_addr + 128) & PAGE_MASK)) >> return set_validity_icpt(scb_s, 0x003CU); >> else if (!crycb_addr) >> return set_validity_icpt(scb_s, 0x0039U); >> >> + /* we may only allow it if enabled for guest 2 */ >> + ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & >> + (ECB3_AES | ECB3_DEA); >> + if (!ecb3_flags) >> + return 0; >> + >> /* copy only the wrapping keys */ >> if (read_guest_real(vcpu, crycb_addr + 72, >> vsie_page->crycb.dea_wrapping_key_mask, 56)) >>
On 23/08/2018 13:19, David Hildenbrand wrote: > On 23.08.2018 13:17, Christian Borntraeger wrote: >> >> >> On 08/23/2018 12:25 PM, Pierre Morel wrote: >>> When entering the SIE the CRYCB validation better >>> be done independently of the instruction's >>> availability. >> >> Maybe something like >> >> We need to handle the validity checks for the crycb, no matter what the >> settings for the keywrappings are. So lets move the keywrapping checks >> after we have done the validy checks. >> >> ? > > With that > > Reviewed-by: David Hildenbrand <david@redhat.com> > > Thanks, I use the description proposed by Christian. regards, Pierre
On 8/23/18 12:25 PM, Pierre Morel wrote: > When entering the SIE the CRYCB validation better > be done independently of the instruction's > availability. > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> > --- > arch/s390/kvm/vsie.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c > index 12b9707..38ea5da 100644 > --- a/arch/s390/kvm/vsie.c > +++ b/arch/s390/kvm/vsie.c > @@ -161,17 +161,18 @@ static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) > /* format-1 is supported with message-security-assist extension 3 */ > if (!test_kvm_facility(vcpu->kvm, 76)) > return 0; > - /* we may only allow it if enabled for guest 2 */ > - ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & > - (ECB3_AES | ECB3_DEA); > - if (!ecb3_flags) > - return 0; > > if ((crycb_addr & PAGE_MASK) != ((crycb_addr + 128) & PAGE_MASK)) > return set_validity_icpt(scb_s, 0x003CU); > else if (!crycb_addr) > return set_validity_icpt(scb_s, 0x0039U); > > + /* we may only allow it if enabled for guest 2 */ > + ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & > + (ECB3_AES | ECB3_DEA); > + if (!ecb3_flags) > + return 0; > + > /* copy only the wrapping keys */ > if (read_guest_real(vcpu, crycb_addr + 72, > vsie_page->crycb.dea_wrapping_key_mask, 56)) > I seemed to have forgotten to add this while being preoccupied with the search for the validity discussion in #3. Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index 12b9707..38ea5da 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -161,17 +161,18 @@ static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) /* format-1 is supported with message-security-assist extension 3 */ if (!test_kvm_facility(vcpu->kvm, 76)) return 0; - /* we may only allow it if enabled for guest 2 */ - ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & - (ECB3_AES | ECB3_DEA); - if (!ecb3_flags) - return 0; if ((crycb_addr & PAGE_MASK) != ((crycb_addr + 128) & PAGE_MASK)) return set_validity_icpt(scb_s, 0x003CU); else if (!crycb_addr) return set_validity_icpt(scb_s, 0x0039U); + /* we may only allow it if enabled for guest 2 */ + ecb3_flags = scb_o->ecb3 & vcpu->arch.sie_block->ecb3 & + (ECB3_AES | ECB3_DEA); + if (!ecb3_flags) + return 0; + /* copy only the wrapping keys */ if (read_guest_real(vcpu, crycb_addr + 72, vsie_page->crycb.dea_wrapping_key_mask, 56))
When entering the SIE the CRYCB validation better be done independently of the instruction's availability. Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> --- arch/s390/kvm/vsie.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)