iio: adc: Use iio_push_to_buffers_with_ts() to provide length for runtime checks.
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 13 Apr 2025 10:34:32 +0000 (11:34 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 21 May 2025 13:20:26 +0000 (14:20 +0100)
This new function allows us to perform debug checks in the helper to ensure
that the overrun does not occur.  Use it in all the simple cases where
either a static buffer or a structure is used in the drivers.

Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250413103443.2420727-10-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
34 files changed:
drivers/iio/adc/ad4000.c
drivers/iio/adc/ad4030.c
drivers/iio/adc/ad4695.c
drivers/iio/adc/ad7266.c
drivers/iio/adc/ad7298.c
drivers/iio/adc/ad7380.c
drivers/iio/adc/ad7476.c
drivers/iio/adc/ad7606.c
drivers/iio/adc/ad7768-1.c
drivers/iio/adc/ad7779.c
drivers/iio/adc/ad7923.c
drivers/iio/adc/dln2-adc.c
drivers/iio/adc/ina2xx-adc.c
drivers/iio/adc/max1118.c
drivers/iio/adc/max11410.c
drivers/iio/adc/max1363.c
drivers/iio/adc/mcp3911.c
drivers/iio/adc/mxs-lradc-adc.c
drivers/iio/adc/pac1921.c
drivers/iio/adc/rockchip_saradc.c
drivers/iio/adc/rtq6056.c
drivers/iio/adc/stm32-adc.c
drivers/iio/adc/ti-adc081c.c
drivers/iio/adc/ti-adc0832.c
drivers/iio/adc/ti-adc084s021.c
drivers/iio/adc/ti-adc12138.c
drivers/iio/adc/ti-ads1015.c
drivers/iio/adc/ti-ads1119.c
drivers/iio/adc/ti-ads124s08.c
drivers/iio/adc/ti-ads8688.c
drivers/iio/adc/ti-lmp92064.c
drivers/iio/adc/ti-tlc4541.c
drivers/iio/adc/ti-tsc2046.c
drivers/iio/adc/vf610_adc.c

index e69a9d2..93ecaf4 100644 (file)
@@ -793,7 +793,8 @@ static irqreturn_t ad4000_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto err_out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->scan, pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->scan, sizeof(st->scan),
+                                   pf->timestamp);
 
 err_out:
        iio_trigger_notify_done(indio_dev->trig);
index 636f9f3..5aa26dc 100644 (file)
@@ -707,8 +707,8 @@ static irqreturn_t ad4030_trigger_handler(int irq, void *p)
        if (ret)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_data.raw,
-                                          pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->rx_data, sizeof(st->rx_data),
+                                   pf->timestamp);
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index 8222c8a..68c6625 100644 (file)
@@ -801,7 +801,8 @@ static irqreturn_t ad4695_trigger_handler(int irq, void *p)
        if (ret)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->buf, pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, st->buf, sizeof(st->buf),
+                                   pf->timestamp);
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index 1855975..d8288d9 100644 (file)
@@ -86,10 +86,9 @@ static irqreturn_t ad7266_trigger_handler(int irq, void *p)
        int ret;
 
        ret = spi_read(st->spi, st->data.sample, 4);
-       if (ret == 0) {
-               iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
-                           pf->timestamp);
-       }
+       if (ret == 0)
+               iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                           pf->timestamp);
 
        iio_trigger_notify_done(indio_dev->trig);
 
index 28b8809..7c0538e 100644 (file)
@@ -155,8 +155,8 @@ static irqreturn_t ad7298_trigger_handler(int irq, void *p)
        if (b_sent)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
-               iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->rx_buf, sizeof(st->rx_buf),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 190ab41..f93e6c6 100644 (file)
@@ -1361,8 +1361,8 @@ static irqreturn_t ad7380_trigger_handler(int irq, void *p)
        if (ret)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->scan_data,
-                                          pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->scan_data, sizeof(st->scan_data),
+                                   pf->timestamp);
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index 37b0515..ddb607a 100644 (file)
@@ -99,8 +99,8 @@ static irqreturn_t ad7476_trigger_handler(int irq, void  *p)
        if (b_sent < 0)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->data,
-               iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->data, sizeof(st->data),
+                                   iio_get_time_ns(indio_dev));
 done:
        iio_trigger_notify_done(indio_dev->trig);
 
index d36b2e2..aa96247 100644 (file)
@@ -605,8 +605,8 @@ static irqreturn_t ad7606_trigger_handler(int irq, void *p)
        if (ret)
                goto error_ret;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                   iio_get_time_ns(indio_dev));
 error_ret:
        iio_trigger_notify_done(indio_dev->trig);
        /* The rising edge of the CONVST signal starts a new conversion. */
index 09e4ab7..47a6ad4 100644 (file)
@@ -533,8 +533,9 @@ static irqreturn_t ad7768_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto out;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->data.scan,
+                                   sizeof(st->data.scan),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index a5d87fa..845adc5 100644 (file)
@@ -595,7 +595,8 @@ static irqreturn_t ad7779_trigger_handler(int irq, void *p)
                goto exit_handler;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data, pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                   pf->timestamp);
 
 exit_handler:
        iio_trigger_notify_done(indio_dev->trig);
index 87945ef..0369151 100644 (file)
@@ -207,8 +207,8 @@ static irqreturn_t ad7923_trigger_handler(int irq, void *p)
        if (b_sent)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->rx_buf, sizeof(st->rx_buf),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index a1e48a7..5ffb4b5 100644 (file)
@@ -488,8 +488,8 @@ static irqreturn_t dln2_adc_trigger_h(int irq, void *p)
                       (void *)dev_data.values + t->from, t->length);
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data, sizeof(data),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 40d14fa..857e1b6 100644 (file)
@@ -766,7 +766,7 @@ static int ina2xx_work_buffer(struct iio_dev *indio_dev)
                chip->scan.chan[i++] = val;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &chip->scan, time);
+       iio_push_to_buffers_with_ts(indio_dev, &chip->scan, sizeof(chip->scan), time);
 
        return 0;
 };
index 565ca2e..7d7001e 100644 (file)
@@ -188,8 +188,8 @@ static irqreturn_t max1118_trigger_handler(int irq, void *p)
                adc->scan.channels[i] = ret;
                i++;
        }
-       iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &adc->scan, sizeof(adc->scan),
+                                   iio_get_time_ns(indio_dev));
 out:
        mutex_unlock(&adc->lock);
 
index 437d9f2..511b2f1 100644 (file)
@@ -632,8 +632,8 @@ static irqreturn_t max11410_trigger_handler(int irq, void *p)
                goto out;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->scan, sizeof(st->scan),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        iio_trigger_notify_done(indio_dev->trig);
index d0546c6..a7e9912 100644 (file)
@@ -1498,8 +1498,8 @@ static irqreturn_t max1363_trigger_handler(int irq, void *p)
        if (b_sent < 0)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &st->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &st->data, sizeof(st->data),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 6748b44..be18635 100644 (file)
@@ -516,8 +516,8 @@ static irqreturn_t mcp3911_trigger_handler(int irq, void *p)
                adc->scan.channels[i] = get_unaligned_be24(&adc->rx_buf[scan_chan->channel * 3]);
                i++;
        }
-       iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &adc->scan, sizeof(adc->scan),
+                                   iio_get_time_ns(indio_dev));
 out:
        iio_trigger_notify_done(indio_dev->trig);
 
index 8f1e6ac..92baf3f 100644 (file)
@@ -425,7 +425,8 @@ static irqreturn_t mxs_lradc_adc_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(iio, adc->buffer, pf->timestamp);
+       iio_push_to_buffers_with_ts(iio, adc->buffer, sizeof(adc->buffer),
+                                   pf->timestamp);
 
        iio_trigger_notify_done(iio->trig);
 
index ef75e9e..72aa4ca 100644 (file)
@@ -1044,7 +1044,8 @@ static irqreturn_t pac1921_trigger_handler(int irq, void *p)
                priv->scan.chan[ch++] = val;
        }
 
-       iio_push_to_buffers_with_timestamp(idev, &priv->scan, pf->timestamp);
+       iio_push_to_buffers_with_ts(idev, &priv->scan, sizeof(priv->scan),
+                                   pf->timestamp);
 
 done:
        iio_trigger_notify_done(idev->trig);
index 9a099df..2162bff 100644 (file)
@@ -425,7 +425,8 @@ static irqreturn_t rockchip_saradc_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(i_dev, &data, iio_get_time_ns(i_dev));
+       iio_push_to_buffers_with_ts(i_dev, &data, sizeof(data),
+                                   iio_get_time_ns(i_dev));
 out:
        mutex_unlock(&info->lock);
 
index 54239df..6ff4741 100644 (file)
@@ -666,7 +666,8 @@ static irqreturn_t rtq6056_buffer_trigger_handler(int irq, void *p)
                data.vals[i++] = raw;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data, iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data, sizeof(data),
+                                   iio_get_time_ns(indio_dev));
 
 out:
        pm_runtime_mark_last_busy(dev);
index 27aec9a..5159908 100644 (file)
@@ -1858,8 +1858,8 @@ static irqreturn_t stm32_adc_trigger_handler(int irq, void *p)
 
        /* reset buffer index */
        adc->bufi = 0;
-       iio_push_to_buffers_with_timestamp(indio_dev, adc->buffer,
-                                          pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, adc->buffer, sizeof(adc->buffer),
+                                   pf->timestamp);
        iio_trigger_notify_done(indio_dev->trig);
 
        /* re-enable eoc irq */
index 1af9be0..4f514db 100644 (file)
@@ -140,8 +140,8 @@ static irqreturn_t adc081c_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto out;
        data->scan.channel = ret;
-       iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data->scan, sizeof(data->scan),
+                                   iio_get_time_ns(indio_dev));
 out:
        iio_trigger_notify_done(indio_dev->trig);
        return IRQ_HANDLED;
index e2dbd07..cfcdafb 100644 (file)
@@ -225,8 +225,8 @@ static irqreturn_t adc0832_trigger_handler(int irq, void *p)
                adc->data[i] = ret;
                i++;
        }
-       iio_push_to_buffers_with_timestamp(indio_dev, adc->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, adc->data, sizeof(adc->data),
+                                   iio_get_time_ns(indio_dev));
 out:
        mutex_unlock(&adc->lock);
 
index 9c845ee..50a474f 100644 (file)
@@ -151,8 +151,8 @@ static irqreturn_t adc084s021_buffer_trigger_handler(int irq, void *pollfunc)
        if (adc084s021_adc_conversion(adc, adc->scan.channels) < 0)
                dev_err(&adc->spi->dev, "Failed to read data\n");
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &adc->scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &adc->scan, sizeof(adc->scan),
+                                   iio_get_time_ns(indio_dev));
        mutex_unlock(&adc->lock);
        iio_trigger_notify_done(indio_dev->trig);
 
index 7f065f4..9dc465a 100644 (file)
@@ -376,8 +376,8 @@ static irqreturn_t adc12138_trigger_handler(int irq, void *p)
                }
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, adc->data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, adc->data, sizeof(adc->data),
+                                   iio_get_time_ns(indio_dev));
 out:
        mutex_unlock(&adc->lock);
 
index 705c146..21181cc 100644 (file)
@@ -467,8 +467,8 @@ static irqreturn_t ads1015_trigger_handler(int irq, void *p)
        scan.chan = res;
        mutex_unlock(&data->lock);
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan),
+                                   iio_get_time_ns(indio_dev));
 
 err:
        iio_trigger_notify_done(indio_dev->trig);
index f120e7e..d280c94 100644 (file)
@@ -534,8 +534,8 @@ static irqreturn_t ads1119_trigger_handler(int irq, void *private)
 
        scan.sample = ret;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &scan,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan),
+                                   iio_get_time_ns(indio_dev));
 done:
        iio_trigger_notify_done(indio_dev->trig);
        return IRQ_HANDLED;
index 77c299b..8ea1269 100644 (file)
@@ -297,8 +297,8 @@ static irqreturn_t ads124s_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, priv->buffer,
-                       pf->timestamp);
+       iio_push_to_buffers_with_ts(indio_dev, priv->buffer, sizeof(priv->buffer),
+                                   pf->timestamp);
 
        iio_trigger_notify_done(indio_dev->trig);
 
index a31658b..b0bf46c 100644 (file)
@@ -389,8 +389,8 @@ static irqreturn_t ads8688_trigger_handler(int irq, void *p)
                j++;
        }
 
-       iio_push_to_buffers_with_timestamp(indio_dev, buffer,
-                       iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, buffer, sizeof(buffer),
+                                   iio_get_time_ns(indio_dev));
 
        iio_trigger_notify_done(indio_dev->trig);
 
index 86eef33..3f375c1 100644 (file)
@@ -209,8 +209,8 @@ static irqreturn_t lmp92064_trigger_handler(int irq, void *p)
        if (ret)
                goto err;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, &data,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, &data, sizeof(data),
+                                   iio_get_time_ns(indio_dev));
 
 err:
        iio_trigger_notify_done(indio_dev->trig);
index 5a138be..f67945c 100644 (file)
@@ -99,8 +99,8 @@ static irqreturn_t tlc4541_trigger_handler(int irq, void *p)
        if (ret < 0)
                goto done;
 
-       iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
-                                          iio_get_time_ns(indio_dev));
+       iio_push_to_buffers_with_ts(indio_dev, st->rx_buf, sizeof(st->rx_buf),
+                                   iio_get_time_ns(indio_dev));
 
 done:
        iio_trigger_notify_done(indio_dev->trig);
index 4956005..84a9a5e 100644 (file)
@@ -418,8 +418,9 @@ static int tsc2046_adc_scan(struct iio_dev *indio_dev)
        for (group = 0; group < priv->groups; group++)
                priv->scan_buf.data[group] = tsc2046_adc_get_val(priv, group);
 
-       ret = iio_push_to_buffers_with_timestamp(indio_dev, &priv->scan_buf,
-                                                iio_get_time_ns(indio_dev));
+       ret = iio_push_to_buffers_with_ts(indio_dev, &priv->scan_buf,
+                                         sizeof(priv->scan_buf),
+                                         iio_get_time_ns(indio_dev));
        /* If the consumer is kfifo, we may get a EBUSY here - ignore it. */
        if (ret < 0 && ret != -EBUSY) {
                dev_err_ratelimited(dev, "Failed to push scan buffer %pe\n",
index 805e197..6404b01 100644 (file)
@@ -592,9 +592,9 @@ static irqreturn_t vf610_adc_isr(int irq, void *dev_id)
                info->value = vf610_adc_read_data(info);
                if (iio_buffer_enabled(indio_dev)) {
                        info->scan.chan = info->value;
-                       iio_push_to_buffers_with_timestamp(indio_dev,
-                                       &info->scan,
-                                       iio_get_time_ns(indio_dev));
+                       iio_push_to_buffers_with_ts(indio_dev, &info->scan,
+                                                   sizeof(info->scan),
+                                                   iio_get_time_ns(indio_dev));
                        iio_trigger_notify_done(indio_dev->trig);
                } else
                        complete(&info->completion);