From cfed445f0cc6ba4c47b426e820193aa1fd208c6c Mon Sep 17 00:00:00 2001 From: thilo jeremias Date: Wed, 21 Aug 2024 08:40:50 +0200 Subject: [PATCH] Fix buffer overflow reset_delay should be initialized before malloc to prevent overflow --- esp_ws28xx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/esp_ws28xx.c b/esp_ws28xx.c index 27dd71a..df1f9ed 100644 --- a/esp_ws28xx.c +++ b/esp_ws28xx.c @@ -36,6 +36,9 @@ esp_err_t ws28xx_init(int pin, led_strip_model_t model, int num_of_leds, esp_err_t err = ESP_OK; n_of_leds = num_of_leds; led_model = model; + // Insrease if something breaks. values are less than recommended in + // datasheets but seem stable + reset_delay = (model == WS2812B) ? 3 : 30; // 12 bytes for each led + bytes for initial zero and reset state dma_buf_size = n_of_leds * 12 + (reset_delay + 1) * 2; ws28xx_pixels = malloc(sizeof(CRGB) * n_of_leds); @@ -57,9 +60,6 @@ esp_err_t ws28xx_init(int pin, led_strip_model_t model, int num_of_leds, free(ws28xx_pixels); return err; } - // Insrease if something breaks. values are less than recommended in - // datasheets but seem stable - reset_delay = (model == WS2812B) ? 3 : 30; // Critical to be DMA memory. dma_buffer = heap_caps_malloc(dma_buf_size, MALLOC_CAP_DMA); if (dma_buffer == NULL) {