aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm/kvm-s390.h
diff options
context:
space:
mode:
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>2015-02-04 09:59:11 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-03-06 07:40:37 -0500
commit15462e37ca848abac7477dece65f8af25febd744 (patch)
tree3c1c0a7696fb9fc9775e1051ca683fd4349e851b /arch/s390/kvm/kvm-s390.h
parent261520dcfcba93ca5dfe671b88ffab038cd940c8 (diff)
KVM: s390: reinjection of irqs can fail in the tpi handler
The reinjection of an I/O interrupt can fail if the list is at the limit and between the dequeue and the reinjection, another I/O interrupt is injected (e.g. if user space floods kvm with I/O interrupts). This patch avoids this memory leak and returns -EFAULT in this special case. This error is not recoverable, so let's fail hard. This can later be avoided by not dequeuing the interrupt but working directly on the locked list. Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Cc: stable@vger.kernel.org # 3.16+ Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'arch/s390/kvm/kvm-s390.h')
-rw-r--r--arch/s390/kvm/kvm-s390.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
index c34109aa552d..6995a3080a0e 100644
--- a/arch/s390/kvm/kvm-s390.h
+++ b/arch/s390/kvm/kvm-s390.h
@@ -151,8 +151,8 @@ int __must_check kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
151int __must_check kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code); 151int __must_check kvm_s390_inject_program_int(struct kvm_vcpu *vcpu, u16 code);
152struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm, 152struct kvm_s390_interrupt_info *kvm_s390_get_io_int(struct kvm *kvm,
153 u64 cr6, u64 schid); 153 u64 cr6, u64 schid);
154void kvm_s390_reinject_io_int(struct kvm *kvm, 154int kvm_s390_reinject_io_int(struct kvm *kvm,
155 struct kvm_s390_interrupt_info *inti); 155 struct kvm_s390_interrupt_info *inti);
156int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked); 156int kvm_s390_mask_adapter(struct kvm *kvm, unsigned int id, bool masked);
157 157
158/* implemented in intercept.c */ 158/* implemented in intercept.c */