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&atid=893831
Reported-by "Xu, Jiajun" <[email protected]>
Signed-off-by Marcelo Tosatti <[email protected]>
virt/kvm/irq_comm.c +3 -4
@@ -215,10 +215,9 @@ int kvm_request_irq_source_id(struct kvm *kvm)int irq_source_id;mutex_lock (&kvm->irq_lock); - irq_source_id =find_first_zero_bit (bitmap, -sizeof (kvm->arch.irq_sources_bitmap)); + 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" ); irq_source_id = -EFAULT ; goto unlock;
@@ -240,7 +239,7 @@ void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id)mutex_lock (&kvm->irq_lock);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" ); goto unlock; }
Quoted 6 lines · Marcelo Tosatti
find_first_zero_bitworks with bit numbers, not bytes.Fixes
https://sourceforge.net/tracker/?func=detail&aid=2847560&group_id=180599&atid=893831
Good catch.
Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.