diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2024-08-13 06:07:03 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2024-08-13 06:07:03 -0400 |
commit | 696eb24ac2af632ddcb422114b2d8498af1de20c (patch) | |
tree | 133e581912d47606c5d7bd1bccef716b6e07d7f1 /arch | |
parent | 747cfbf161a5bc292ce194bfce6ab1a2d5e60b40 (diff) | |
parent | cff59d8631e1409ffdd22d9d717e15810181b32c (diff) |
Merge tag 'kvm-s390-master-6.11-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD
Fix invalid gisa designation value when gisa is not in use.
Panic if (un)share fails to maintain security.
Diffstat (limited to 'arch')
-rw-r--r-- | arch/s390/include/asm/uv.h | 5 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.h | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h index 0b5f8f3e84f1..153d93468b77 100644 --- a/arch/s390/include/asm/uv.h +++ b/arch/s390/include/asm/uv.h @@ -441,7 +441,10 @@ static inline int share(unsigned long addr, u16 cmd) if (!uv_call(0, (u64)&uvcb)) return 0; - return -EINVAL; + pr_err("%s UVC failed (rc: 0x%x, rrc: 0x%x), possible hypervisor bug.\n", + uvcb.header.cmd == UVC_CMD_SET_SHARED_ACCESS ? "Share" : "Unshare", + uvcb.header.rc, uvcb.header.rrc); + panic("System security cannot be guaranteed unless the system panics now.\n"); } /* diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h index bf8534218af3..e680c6bf0c9d 100644 --- a/arch/s390/kvm/kvm-s390.h +++ b/arch/s390/kvm/kvm-s390.h @@ -267,7 +267,12 @@ static inline unsigned long kvm_s390_get_gfn_end(struct kvm_memslots *slots) static inline u32 kvm_s390_get_gisa_desc(struct kvm *kvm) { - u32 gd = virt_to_phys(kvm->arch.gisa_int.origin); + u32 gd; + + if (!kvm->arch.gisa_int.origin) + return 0; + + gd = virt_to_phys(kvm->arch.gisa_int.origin); if (gd && sclp.has_gisaf) gd |= GISA_FORMAT1; |