aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2019-06-04 13:17:51 +0300
committerMarc Zyngier <marc.zyngier@arm.com>2019-06-05 09:35:11 +0100
commiteb737b8f446044df327b30f24416be0cae35d4aa (patch)
treeb238b87ac56f44f7e82e8b3d10d648411c98acae
parentdb56c5128e6625cb16efc4910b60627e46f608e3 (diff)
downloadkernel_replicant_linux-eb737b8f446044df327b30f24416be0cae35d4aa.tar.gz
kernel_replicant_linux-eb737b8f446044df327b30f24416be0cae35d4aa.tar.bz2
kernel_replicant_linux-eb737b8f446044df327b30f24416be0cae35d4aa.zip
irqchip/ti-sci-inta: Fix kernel crash if irq_create_fwspec_mapping fail
irq_create_fwspec_mapping() can fail, returning 0 as parent_virq. In this case vint_desc is going to be NULL in ti_sci_inta_alloc_irq() which will cause NULL pointer dereference. Also note that irq_create_fwspec_mapping() returns 'unsigned int' so the check '<=' was wrong. Use -EINVAL if irq_create_fwspec_mapping() returned with 0. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
-rw-r--r--drivers/irqchip/irq-ti-sci-inta.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/irqchip/irq-ti-sci-inta.c b/drivers/irqchip/irq-ti-sci-inta.c
index 011b60a49e3f..ef4d625d2d80 100644
--- a/drivers/irqchip/irq-ti-sci-inta.c
+++ b/drivers/irqchip/irq-ti-sci-inta.c
@@ -159,9 +159,9 @@ static struct ti_sci_inta_vint_desc *ti_sci_inta_alloc_parent_irq(struct irq_dom
parent_fwspec.param[1] = vint_desc->vint_id;
parent_virq = irq_create_fwspec_mapping(&parent_fwspec);
- if (parent_virq <= 0) {
+ if (parent_virq == 0) {
kfree(vint_desc);
- return ERR_PTR(parent_virq);
+ return ERR_PTR(-EINVAL);
}
vint_desc->parent_virq = parent_virq;