From d90fa6e6df88d22fdaa50aa86136dae5e883eb99 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Wed, 2 Sep 2015 17:59:46 +0200 Subject: [PATCH] port_adc_get: Do not leak data If the caller requested more data than what ADC actually returns zero the fields not filled by ADC. --- rpp/src/drv/adc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/rpp/src/drv/adc.c b/rpp/src/drv/adc.c index 02c0861..3951dae 100644 --- a/rpp/src/drv/adc.c +++ b/rpp/src/drv/adc.c @@ -110,20 +110,24 @@ int8_t port_adc_get(const struct port_desc *port, void *values, size_t size) { uint32_t i; adcData_t data[ADC_MAX_CHANNELS]; - int count = MIN(port->numchn, size/sizeof(uint16_t)); + uint32_t count = MIN(port->numchn, size/sizeof(uint16_t)); + uint32_t ret; uint16_t *adcval = values; assert(port->bpch == 16); + assert(port->numchn <= ADC_MAX_CHANNELS); assert(size % sizeof(uint16_t) == 0); - drv_adc_generic_read( + ret = drv_adc_generic_read( port->cfg.adc.reg, port->cfg.adc.group, data ); - for (i = 0; i < count; i++) + for (i = 0; i < ret; i++) adcval[i] = data[i].value; + for (i = ret; i < count; i++) + adcval[i] = 0; return 0; } -- 2.39.2