sparc: fix array overrun check in of_device_64.c

Do the array length check and fixup before copying the array.

Signed-off-by: Robert Reif <reif@earthlink.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Robert Reif 2008-12-26 15:39:11 -08:00 committed by David S. Miller
parent e6b04fe0ba
commit 92d9091f30

View File

@ -811,11 +811,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
irq = of_get_property(dp, "interrupts", &len);
if (irq) {
memcpy(op->irqs, irq, len);
op->num_irqs = len / 4;
} else {
op->num_irqs = 0;
}
/* Prevent overrunning the op->irqs[] array. */
if (op->num_irqs > PROMINTR_MAX) {
@ -824,6 +820,10 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
dp->full_name, op->num_irqs, PROMINTR_MAX);
op->num_irqs = PROMINTR_MAX;
}
memcpy(op->irqs, irq, op->num_irqs * 4);
} else {
op->num_irqs = 0;
}
build_device_resources(op, parent);
for (i = 0; i < op->num_irqs; i++)