Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 61552367 authored by Mark McLoughlin's avatar Mark McLoughlin Committed by Avi Kivity
Browse files

KVM: add KVM_USERSPACE_IRQ_SOURCE_ID assertions



Make sure kvm_request_irq_source_id() never returns
KVM_USERSPACE_IRQ_SOURCE_ID.

Likewise, check that kvm_free_irq_source_id() never accepts
KVM_USERSPACE_IRQ_SOURCE_ID.

Signed-off-by: default avatarMark McLoughlin <markmc@redhat.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent f29b2673
Loading
Loading
Loading
Loading
+10 −4
Original line number Original line Diff line number Diff line
@@ -72,11 +72,15 @@ int kvm_request_irq_source_id(struct kvm *kvm)
	unsigned long *bitmap = &kvm->arch.irq_sources_bitmap;
	unsigned long *bitmap = &kvm->arch.irq_sources_bitmap;
	int irq_source_id = find_first_zero_bit(bitmap,
	int irq_source_id = find_first_zero_bit(bitmap,
				sizeof(kvm->arch.irq_sources_bitmap));
				sizeof(kvm->arch.irq_sources_bitmap));

	if (irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) {
	if (irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) {
		printk(KERN_WARNING "kvm: exhaust allocatable IRQ sources!\n");
		printk(KERN_WARNING "kvm: exhaust allocatable IRQ sources!\n");
		irq_source_id = -EFAULT;
		return -EFAULT;
	} else
	}

	ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);
	set_bit(irq_source_id, bitmap);
	set_bit(irq_source_id, bitmap);

	return irq_source_id;
	return irq_source_id;
}
}


@@ -84,7 +88,9 @@ void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id)
{
{
	int i;
	int i;


	if (irq_source_id <= 0 ||
	ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);

	if (irq_source_id < 0 ||
	    irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) {
	    irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) {
		printk(KERN_ERR "kvm: IRQ source ID out of range!\n");
		printk(KERN_ERR "kvm: IRQ source ID out of range!\n");
		return;
		return;