iio: adc: tsc2046: add sanity check to avoid to big allocations
authorOleksij Rempel <o.rempel@pengutronix.de>
Mon, 17 Jan 2022 08:28:52 +0000 (09:28 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 23 Jan 2022 18:03:37 +0000 (18:03 +0000)
To avoid problematic devicetree configurations. Set allocation limit
with error message and suggestion on what can be done to solve this
issue.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20220117082852.3370869-2-o.rempel@pengutronix.de
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/ti-tsc2046.c

index eb219ff3d61048bbe0262583613823ec8d216c69..2b87f39f377abb05000a3aefb081c08910f3dc75 100644 (file)
@@ -679,6 +679,12 @@ static int tsc2046_adc_setup_spi_msg(struct tsc2046_adc_priv *priv)
        for (ch_idx = 0; ch_idx < priv->dcfg->num_channels; ch_idx++)
                size += tsc2046_adc_group_set_layout(priv, ch_idx, ch_idx);
 
+       if (size > PAGE_SIZE) {
+               dev_err(&priv->spi->dev,
+                       "Calculated scan buffer is too big. Try to reduce spi-max-frequency, settling-time-us or oversampling-ratio\n");
+               return -ENOSPC;
+       }
+
        priv->tx = devm_kzalloc(&priv->spi->dev, size, GFP_KERNEL);
        if (!priv->tx)
                return -ENOMEM;