lkml.org 
[lkml]   [2008]   [Dec]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 17/36] KVM: add KVM_USERSPACE_IRQ_SOURCE_ID assertions
    Date
    From: Mark McLoughlin <markmc@redhat.com>

    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: Mark McLoughlin <markmc@redhat.com>
    Signed-off-by: Avi Kivity <avi@redhat.com>
    ---
    virt/kvm/irq_comm.c | 14 ++++++++++----
    1 files changed, 10 insertions(+), 4 deletions(-)

    diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c
    index db75045..aa5d1e5 100644
    --- a/virt/kvm/irq_comm.c
    +++ b/virt/kvm/irq_comm.c
    @@ -72,11 +72,15 @@ 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));
    +
    if (irq_source_id >= sizeof(kvm->arch.irq_sources_bitmap)) {
    printk(KERN_WARNING "kvm: exhaust allocatable IRQ sources!\n");
    - irq_source_id = -EFAULT;
    - } else
    - set_bit(irq_source_id, bitmap);
    + return -EFAULT;
    + }
    +
    + ASSERT(irq_source_id != KVM_USERSPACE_IRQ_SOURCE_ID);
    + set_bit(irq_source_id, bitmap);
    +
    return irq_source_id;
    }

    @@ -84,7 +88,9 @@ void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id)
    {
    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)) {
    printk(KERN_ERR "kvm: IRQ source ID out of range!\n");
    return;
    --
    1.6.0.3


    \
     
     \ /
      Last update: 2008-12-14 09:15    [W:0.020 / U:60.472 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site