From: Uwe Kleine-König Date: Tue, 29 Nov 2016 11:13:38 +0000 (+0100) Subject: ata: sata_mv: check for errors when parsing nr-ports from dt X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=5c3ef39738f74a3759918cc1a1ad099504f9d1b7;p=linux.git ata: sata_mv: check for errors when parsing nr-ports from dt If the nr-ports property is missing ata_host_alloc_pinfo is called with n_ports = 0. This results in host->ports[0] = NULL which later makes mv_init_host() oops when dereferencing this pointer. Instead be a bit more cooperative and fail the probing with an error message. Signed-off-by: Uwe Kleine-König Signed-off-by: Tejun Heo --- diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index efc48bf89d518..823e938c9a787 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c @@ -4090,7 +4090,20 @@ static int mv_platform_probe(struct platform_device *pdev) /* allocate host */ if (pdev->dev.of_node) { - of_property_read_u32(pdev->dev.of_node, "nr-ports", &n_ports); + rc = of_property_read_u32(pdev->dev.of_node, "nr-ports", + &n_ports); + if (rc) { + dev_err(&pdev->dev, + "error parsing nr-ports property: %d\n", rc); + return rc; + } + + if (n_ports <= 0) { + dev_err(&pdev->dev, "nr-ports must be positive: %d\n", + n_ports); + return -EINVAL; + } + irq = irq_of_parse_and_map(pdev->dev.of_node, 0); } else { mv_platform_data = dev_get_platdata(&pdev->dev);