]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - virt/kvm/irqchip.c
Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux.git] / virt / kvm / irqchip.c
index b1286c4e0712259fac5d66b9bbc3aaf388d3d3f9..79e59e4fa3dc6be751079e669e214b7fc614e07f 100644 (file)
@@ -144,18 +144,19 @@ static int setup_routing_entry(struct kvm *kvm,
 {
        struct kvm_kernel_irq_routing_entry *ei;
        int r;
+       u32 gsi = array_index_nospec(ue->gsi, KVM_MAX_IRQ_ROUTES);
 
        /*
         * Do not allow GSI to be mapped to the same irqchip more than once.
         * Allow only one to one mapping between GSI and non-irqchip routing.
         */
-       hlist_for_each_entry(ei, &rt->map[ue->gsi], link)
+       hlist_for_each_entry(ei, &rt->map[gsi], link)
                if (ei->type != KVM_IRQ_ROUTING_IRQCHIP ||
                    ue->type != KVM_IRQ_ROUTING_IRQCHIP ||
                    ue->u.irqchip.irqchip == ei->irqchip.irqchip)
                        return -EINVAL;
 
-       e->gsi = ue->gsi;
+       e->gsi = gsi;
        e->type = ue->type;
        r = kvm_set_routing_entry(kvm, e, ue);
        if (r)
@@ -196,7 +197,7 @@ int kvm_set_irq_routing(struct kvm *kvm,
        nr_rt_entries += 1;
 
        new = kzalloc(sizeof(*new) + (nr_rt_entries * sizeof(struct hlist_head)),
-                     GFP_KERNEL);
+                     GFP_KERNEL_ACCOUNT);
 
        if (!new)
                return -ENOMEM;
@@ -208,7 +209,7 @@ int kvm_set_irq_routing(struct kvm *kvm,
 
        for (i = 0; i < nr; ++i) {
                r = -ENOMEM;
-               e = kzalloc(sizeof(*e), GFP_KERNEL);
+               e = kzalloc(sizeof(*e), GFP_KERNEL_ACCOUNT);
                if (!e)
                        goto out;