From 141470705dc2ab3185628b72ee646a8b754ae7f1 Mon Sep 17 00:00:00 2001 From: Don Dutile <ddutile@redhat.com> Date: Mon, 15 Mar 2010 15:18:37 -0300 Subject: [PATCH 2/3] Backport KVM: fix irq_source_id size verification RH-Author: Don Dutile <ddutile@redhat.com> Message-id: <4B9E4FCD.6010003@redhat.com> Patchwork-id: 7758 O-Subject: [RHEL5.6 PATCH KVM] Backport KVM: fix irq_source_id size verification Bugzilla: 520572 RH-Acked-by: Avi Kivity <avi@redhat.com> RH-Acked-by: Marcelo Tosatti <mtosatti@redhat.com> RH-Acked-by: Gleb Natapov <gleb@redhat.com> BZ 520572 Backport of: commit cd5a2685de4a642fd0bd763e8c19711ef08dbe27 Author: Marcelo Tosatti <mtosatti@redhat.com> Date: Sat Oct 17 22:47:23 2009 -0300 KVM: fix irq_source_id size verification find_first_zero_bit works with bit numbers, not bytes. Fixes https://sourceforge.net/tracker/?func=detail&aid=2847560&group_id=180599&a Reported-by: "Xu, Jiajun" <jiajun.xu@intel.com> Cc: stable@kernel.org Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Tested by BZ reporter as fixing the problem. Built brew rpm located at: http://people.redhat.com/~ddutile/rhel5/bz520572/ (this is the rpm tested by reporter). Please review and ack. - Don ps -- if approved for 5.6, it is recommended that this be flagged & backported to 5.5-z. >From 4ca6d17539cc350d4ac2b8a9ea4c0ea54346bfde Mon Sep 17 00:00:00 2001 From: Donald Dutile <ddutile@redhat.com> Date: Wed, 3 Mar 2010 19:50:29 -0500 Subject: [PATCH] KVM: fix irq_source_id size verification Backport from upstream for bz 547025. --- virt/kvm/irq_comm.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- virt/kvm/irq_comm.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c index f45c30d..5414bad 100644 --- a/virt/kvm/irq_comm.c +++ b/virt/kvm/irq_comm.c @@ -230,10 +230,9 @@ void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian) int kvm_request_irq_source_id(struct kvm *kvm) { unsigned long *bitmap = &kvm->arch.irq_sources_bitmap; - int irq_source_id = find_first_zero_bit(bitmap, - sizeof(kvm->arch.irq_sources_bitmap)); + int irq_source_id = find_first_zero_bit(bitmap, BITS_PER_LONG); - if (irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) { + if (irq_source_id >= BITS_PER_LONG) { printk(KERN_WARNING "kvm: exhaust allocatable IRQ sources!\n"); return -EFAULT; } @@ -251,7 +250,7 @@ void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id) 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 >= BITS_PER_LONG) { printk(KERN_ERR "kvm: IRQ source ID out of range!\n"); return; } -- 1.7.0.3